MVC Core中的模型绑定空值

问题描述 投票:0回答:1

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

动作方法

[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个回答
0
投票

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

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; }

}
© www.soinside.com 2019 - 2024. All rights reserved.