Подтвердить что ты не робот

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

Извините, если заголовок неясен.

Я пытаюсь вернуть свою модель из формы submit в 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. Может ли кто-нибудь предложить мне какое-либо руководство по этому поводу?

4b9b3361

Ответ 1

Не нужно вообще удаляться от бритвы.

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

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

Ответ 2

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

Просмотр

@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)
{
       //
}

Ответ 3

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

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

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

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

@model YourNameSpace.Model

Ответ 4

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

Вид

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