微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

检索和填充数据ASP.Net Core 2.2 MVC

如何解决检索和填充数据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 举报,一经查实,本站将立刻删除。