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. Может ли кто-нибудь предложить мне какое-либо руководство по этому поводу?
Ответы
Ответ 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();
}