如何解决检索和填充数据ASP.Net Core 2.2 MVC
我在控制器中有以下代码,我在其中返回一个将参数传递给它的帐户视图,如下所示
[HttpGet]
public async Task<ActionResult> Account()
{
var findUser = await UserMgr.FindByNameAsync(User.Identity.Name);
var contactDetails =
(from c in _context.UserPersonalDetails
where c.ID == findUser.Id
select c);
var result = _context.Database.ExecutesqlCommand("select * from [dbo].[UserPersonalDetails] where ID={0}",findUser.Id);
ViewBag.Data = contactDetails;
return View(contactDetails);
}
这是我的模特
public class UserPersonalDetails
{
[Key]
public int ID { get; set; }
[required]
[StringLength(100,ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.",MinimumLength = 3)]
[DataType(DataType.Text)]
[display(Name = "First Name")]
public string FirstName { get; set; }
[required]
[StringLength(100,MinimumLength = 3)]
[DataType(DataType.Text)]
[display(Name = "Last Name")]
public string LastName { get; set; }
[required]
[DataType(DataType.PhoneNumber)]
[display(Name = "Phone")]
public string Phone { get; set; }}
这是我的视图,其中声明了模型,并且
@model FriendShipping.Models.UserPersonalDetails
<form method="post" asp-action="account" asp-controller="account" id="registrationForm">
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<div class="col-xs-6">
<label asp-for="FirstName"></label>
<input asp-for="FirstName" type="text" class="form-control" />
<span asp-validation-for="FirstName" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-xs-6">
<label asp-for="LastName"></label>
<input asp-for="LastName" type="text" class="form-control" />
<span asp-validation-for="LastName" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-xs-6">
<label asp-for="Phone"></label>
<input asp-for="Phone" type="text" class="form-control" />
<span asp-validation-for="Phone" class="text-danger"></span>
</div>
</div>
<div class="form-group">
<div class="col-xs-12">
<br>
<button type="submit" class="btn btn-success small" id="saveUpdatedDetails" disabled><i class="glyphicon glyphicon-ok-sign"></i> Save</button>
<button type="button" class="btn" id="enableupdate"><i class="glyphicon glyphicon-repeat"></i> Update</button>
</div>
</div>
</form>
返回视图时,我收到以下错误,我试图以几种方式重构代码,但仍然存在
InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1[FriendShipping.Models.UserPersonalDetails]',but this ViewDataDictionary instance requires a model item of type 'FriendShipping.Models.UserPersonalDetails'.
我的主要问题是如何使用检索到的数据填充输入字段? 感谢您的指导/帮助。
解决方法
更改
var contactDetails =
(from c in _context.UserPersonalDetails
where c.ID == findUser.Id
select c);
收件人
if( findUser ==null) return NotFound("user is not found");
var contactDetails =
(from c in _context.UserPersonalDetails
where c.ID == findUser.Id
select c).FirstOrDefault();
or even shorter:
var contactDetails = await _context.DbSet<UserPersonalDetails>()
.Where(c=> c.ID == findUser.Id)
.FirstOrDefaultAsync();
And add attribut [Table("UserPersonalDetails")] to the top of the class.
Just remember for the future: NEVER GIVE PLURAL NAMES ENDING AT S TO ENTITY. It is very confusing since EF usually almost automaticly assingns plural names to the collections.
,
查询返回iQueryable<UserPersonalDetails>
您的模型在哪里UserPersonalDetails
在控制器中尝试此修改
var contactDetails =(from c in _context.UserPersonalDetails where c.ID == findUser.Id select c).FirstOrDefault()
;
SqlNullValueException:数据为Null。不能在Null值上调用此方法或属性。
表列似乎具有NULL
值,而您的所有属性都设置有[Required]
属性,因此,它将引发此错误。您可以检查UserPersonalDetails
表中ID为findUser.Id
的记录,以查找其列中是否为空值。
here解决了一个类似的问题。您可以参考它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。