ASP.NET MVC CheckBoxList из модели со свойством List

Извиняюсь, если название неясно.

Я пытаюсь вернуть свою модель из формы отправки в ASP.NET MVC.

Мой вопрос почти такой же, как этот вопрос, отличается только тем, что у меня нет List<Model> но модель как:

public Model
{
     string UserName {get; set;}
     string Password {get; set;}
     List<Roles> UserRoles {get; set;}
}

где мне нужны UserRoles как флажки, которые администратор может выбрать при создании нового пользователя. У меня вопрос, я не уверен, как использовать @Html.CheckBoxFor для списка. Я попробовал это:

 @for (var i = 0; i < Model.UserRoles.Count();i++ )
 {
   @Html.HiddenFor(model => model.UserRoles[i].RoleID)
   @Html.CheckBoxFor(model => model.UserRoles[i].Selected)
   @Html.LabelFor(model => model.UserRoles[i].Name)
 }

который никоим образом не работал - каждый ярлык на странице - "Имя", и мой Список был пуст в POST. Кто-нибудь может предложить мне какое-либо руководство по этому вопросу?

4 ответа

Решение

Не нужно уходить от Бритвы вообще.

Это работает для меня:

for (var i = 0; i < Model.UserRoles.Count(); i++)
{
    var role = Model.UserRoles[i];
    @Html.HiddenFor(model => model.UserRoles[i].RoleId)
    @Html.CheckBoxFor(model => model.UserRoles[i].Selected)
    @Html.LabelFor(model=> model.UserRoles[i].Name, role.Name)
}

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

Посмотреть

@foreach (Roles info in Model.UserRoles)
{
    <span>
        <input type="checkbox" class="checkbox" name="selectedRoles" value="@info.RoleName" id="@infoRoleName" />
        <label for="@info.RoleName">@info.RoleName</label>
    </span>
}

действие

[HttpPost]
public ActionResult CreateUsers(Model model, string[] selectedRoles)
{
       //
}

Исходя из вашего кода в представлении, сообщение должно работать нормально при условии, что ваше сообщение будет выглядеть так:

[HttpPost]
public ActionResult Action(Model model)
{
    return View(model);
}

т.е. передавая вашу модель в качестве аргумента.

Также убедитесь, что у вас есть ссылка на вашу модель в представлении:

@model YourNameSpace.Model

Разместите список флажков на сервере и получите список проверенных элементов
linq оставил соединение, чтобы проверить, проверено ли, генерирует ли флажки, получает проверенный список

Посмотреть

    List<eDurar.Models.tbl_ISOCetificate> ModList = db.tbl_ISOCetificate.ToList();

    var li = (from cert in db.tbl_ISOCetificate join comCert in db.tbl_CompCertificate on cert.Cert_id equals comCert.CompCer_id into jo from b in jo.DefaultIfEmpty()
              select new {cert.Cert_id,cert.Cert_Name,chkd = b.CompCer_SerId==null?"":"checked"}).ToList();


    foreach (var item in li)
    {       
        @:<div style="width: 30%;  display: inline-block; margin: 1em">
        @:<input type="checkbox" @item.chkd name="CheckedCertificates" value="@item.Cert_id">
        @:<label>@item.Cert_Name</label>
        @:</div> 
    }

контроллер

  [HttpPost]
    public ActionResult ManageSurveyGroup(int[] CheckedCertificates)
    {
        return View();
    }
Другие вопросы по тегам