【问题标题】:Model binding null values in MVC CoreMVC Core 中的模型绑定空值
【发布时间】:2020-09-24 06:22:49
【问题描述】:

我正在尝试将数据从表单发布到操作方法,但看起来模型绑定器未绑定到实体,并且我在操作方法中得到空值,非常感谢您的帮助 请在下面找到代码 sn-p。

动作方法

[HttpPost]
    public async Task<IActionResult> Update(EditRoleViewModel model)
    {
        if (ModelState.IsValid)
        {

            var role = await _Roleame.FindByIdAsync(model.Id);
            if (role == null)
            {
                return RedirectToAction("notfound");
            }
            role.Name = model.RoleName;
            var result = await _Roleame.UpdateAsync(role);
            if (result.Succeeded)
            {
                return RedirectToAction("getAllRoles", "Administrator");
            }
        }
        else {
            ModelState.AddModelError(string.Empty, "Error");
        }

        return View();

    }

型号

public class EditRoleViewModel
{
    public EditRoleViewModel()
    {
        names = new List<string>();
    }
    public string Id;
    [Required]
    public string RoleName;
    public List<string> names;
}

查看

    @model FirstCoreApplication.Model.EditRoleViewModel
<script src="~/twitter-bootstrap/js/bootstrap.js"></script>
<link href="~/twitter-bootstrap/css/bootstrap.css" rel="stylesheet" />
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">


@{
    ViewBag.Title = "Edit Role";
}

<h1>Edit Role</h1>

<form method="post" class="mt-3" asp-controller="Administrator" asp-action="Update">
    <div class="form-group row">
        <label asp-for="Id" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="Id" disabled class="form-control">
        </div>
    </div>
    <div class="form-group row">
        <label asp-for="RoleName" class="col-sm-2 col-form-label"></label>
        <div class="col-sm-10">
            <input asp-for="RoleName" class="form-control">
            <span asp-validation-for="RoleName" class="text-danger"></span>
        </div>
    </div>

    <div asp-validation-summary="All" class="text-danger"></div>

    <div class="form-group row">
        <div class="col-sm-10">
            <button type="submit" class="btn btn-primary">Update</button>
            <a asp-action="ListRoles" class="btn btn-primary">Cancel</a>
        </div>
    </div>
    <div class="card">
        <div class="card-header">
            <h3>Users in this role</h3>
        </div>
        <div class="card-body">
            @if (Model.names.Any())
            {
                foreach (var user in Model.names)
                {
                    <h5 class="card-title">@user</h5>
                }
            }
            else
            {
                <h5 class="card-title">None at the moment</h5>
            }
        </div>
        <div class="card-footer">
            <a href="#" class="btn btn-primary" style="width:auto">Add Users</a>
            <a href="#" class="btn btn-primary" style="width:auto">Remove Users</a>
        </div>
    </div>
</form>

在此处输入代码

【问题讨论】:

标签: asp.net-mvc asp.net-core asp.net-mvc-4 model-view-controller .net-core


【解决方案1】:

我花了几个小时在我的代码中寻找错误,而在我的情况下,活页夹无法正常工作的原因是使用具有公共字段而不是公共属性的模型:

public class EditRoleViewModel
{
    public EditRoleViewModel()
    {
        names = new List<string>();
    }


    public string Id { get; set; }

    [Required]
    public string RoleName { get; set; }

    public List<string> names { get; set; }

}

【讨论】:

    【解决方案2】:

    您发布的表单数据与您的模型的属性不匹配。您没有发布参数名称。

    公共列表名称 { get;放; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多