значение модели равно нулю при обновлении таблицы в Razor с использованием моделей Entity - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть табличное представление для отображения ролей компании, которое содержит флажок для выбора ролей.enter image description here

Я хочу обновить это в модели.Моя страница 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 и Multirow (пакетное) редактирование .

1 Ответ

1 голос
/ 21 сентября 2019

Передайте Id для вашего метода публикации, и имя элемента управления должно совпадать с именем свойства модели, чтобы связать значение с параметром модели модели.Повторение этих элементов управления для создания уникального идентификатора для каждого элемента управления.В форме сообщения он будет привязывать данные к модели списка.

Оформите мой код ниже.

Вид:

@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;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...