【问题标题】:model value is null in table updatein Razor using Entity models使用实体模型在 Razor 中的表更新中模型值为空
【发布时间】:2019-09-21 15:37:38
【问题描述】:

我有一个表格视图来显示公司的角色,其中包含用于选择角色的复选框。

我想在模型中更新它。我的 Roles.cshtml 页面如下,

@model IEnumerable<ExpenCare.Models.CompanyRole>

<div class="row">
    @Html.Partial("_RightSidePane")
    <div class="col-10 col-sm-8 col-xs-8 col-md-10">
        <div class="tab-content" id="nav-tabContent">
            <div class="tab-pane fade" id="list-Roles-Content" role="tabpanel" aria-labelledby="list-Roles"></div>
            @using (@Html.BeginForm("UpdateRoles", "Admin", FormMethod.Post))
            {
            <table class="table">
                    <tr>
                        <th>
                            Name
                        </th>
                        <th>
                            Enable
                        </th>
                    </tr>

                    @foreach (var item in Model)
                    {
                        <tr>
                            <td>
                                @Html.DisplayFor(m => item.Name)
                            </td>
                            <td>
                                @Html.EditorFor(m => item.IsCheked, new { @checked = "checked" })
                            </td>
                        </tr>
                    }

                </table>
                <p><input type="submit" value="Save Changes" /></p>
                <p style="color:green; font-size:12px;">@ViewBag.Message</p>
            }
        </div>
    </div>
</div>

我的 UpdateRoles 操作如下所示,

[HttpPost]
        public ActionResult UpdateRoles(List<CompanyRole> model)
        {
            if (ModelState.IsValid)
            {
                foreach(var i in model)
                {
                    var id = i.Id;
                    var role = i.Name;
                }
            }
            ViewBag.Message = "Successfully updated.";
            return View("Roles/Roles", model: model);
    }

从角色操作中检索到的数据。

public ActionResult Roles()
        {
            List<CompanyRole> roles = new List<CompanyRole>();
            HttpClient client = new HttpClient();           
                client.BaseAddress = new Uri("http://localhost:1888/api/");
                //HTTP GET
                var responseTask = client.GetAsync("CompanyRoles");
                responseTask.Wait();

                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    var readTask = result.Content.ReadAsAsync<List<CompanyRole>>();
                    readTask.Wait();

                    roles = readTask.Result;
                }
                else //web api sent error response 
                {
                    //log response status here..

                    roles = null;

                    ModelState.AddModelError(string.Empty, "Server error. Please contact administrator.");
                }
            return View("Roles/Roles", model: roles);
        }

我尝试调试 updateRole 方法,但模型始终为空。我不知道是不是因为部分观点。但是当我单击更新时它会返回到操作方法。是不是不能更新了?我也试过MVC 5, EF 6 and Multirow(batch) editing

【问题讨论】:

    标签: c# asp.net-mvc entity-framework razor


    【解决方案1】:

    将 ID 传递给您的 post 方法,并且控件名称应与模型属性名称匹配,以将值绑定到 post 模型参数。迭代这些控件以为每个控件创建一个唯一的 id。在表单发布时,它将数据绑定到 List 模型。

    查看我的以下代码。

    查看:

    @using (Html.BeginForm("UpdateRoles","AdminRoles",FormMethod.Post))  
    { 
      @for (var i = 0; i < Model.Count(); i++)  
      { 
        <tr>
           <td>
               //to pass id to your post method
               @Html.HiddenFor(m => m[i].Id) 
               @Html.DisplayFor(m => m[i].Name)
           </td>
           <td>
               @Html.CheckBoxFor(m => m[i].IsChecked, new { })
           </td>
       </tr>
     }
     <input id="Submit" type="submit" value="submit" />   
    }  
    
    

    控制器:

     [HttpPost]  
     public ActionResult UpdateRoles(List<CompanyRole> model)
     {  
         //your logic
         return View();  
     }
    

    型号:

    public class CompanyRole {
        public int Id {get; set;}
        public string Name {get; set;}
        public bool IsChecked {get; set;}
    }
    

    【讨论】:

    • 谢谢!!!!你救了我的爸爸。请在@Html.BeginForm 中添加""UpdateRoles"、"Admin"、FormMethod.Post" 以供将来参考,不应删除
    猜你喜欢
    • 2013-12-04
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 2013-09-27
    • 1970-01-01
    • 2022-08-14
    相关资源
    最近更新 更多