У меня есть следующие cshtml образуютПолучить выбранные элементы из CheckBoxList MVC.NET Razor
@using (Html.BeginForm(Html.BeginForm("Create", "UserRole", Model, FormMethod.Post)))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Role</legend>
<div class="editor-label">
@Html.Label(Model.User.UserName)
</div>
<div class="editor-field">
@Html.CheckBoxList(Model.CheckboxList)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
И я хочу, чтобы получить Model.CheckboxList выбранные товары в моем действии.
У меня есть следующий Создать действие в мой контроллер
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(UserRoleViewModel userRoleViewModel)
{
if (ModelState.IsValid)
{
//_context.Role.Add(role);
//_context.SaveChanges();
//return RedirectToAction("Index");
}
return View(viewModel);
}
Однако viewModel.CheckboxList 0.
Как я могу передать выбранные значения CheckBoxList, а также Model.User к действие контроллера?
Мои ViewModel выглядит следующим образом: -
public User User { get; set; }
public IEnumerable<Role> RoleList { get; set; }
public List<UserRoleViewModel> UserList { get; set; }
public IEnumerable<SelectListItem> CheckboxList { get; set; }
public UserRoleViewModel()
{
}
public UserRoleViewModel(User user, IEnumerable<Role> roleList)
{
User = user;
RoleList = roleList;
}
Спасибо за вашу помощь и время!
ОБНОВЛЕНИЕ ----------- После прочтения этого сообщения enter link description here, я попытался адаптировать мой код, чтобы следовать примеру, но я все еще нахожу проблемы с этим обновленным кодом.
Теперь у меня есть следующие: -
cshtml: -
@model IEnumerable<MvcMembership.ViewModels.RoleCheckboxListViewModel>
@using (Html.BeginForm())
{
@Html.EditorForModel()
<input type="submit" value="OK" />
}
Просмотров/Роль/EditorTemplates/RoleCheckboxListViewModel.cshtml
@model MvcMembership.ViewModels.RoleCheckboxListViewModel
@Html.HiddenFor(x => x.RoleId)
@Html.HiddenFor(x => x.RoleName)
<div>
@Html.CheckBoxFor(x => x.Checked)
@Html.LabelFor(x => x.Checked, Model.RoleName)
</div>
ViewModels: -
public class RoleCheckboxListViewModel
{
public string RoleId { get; set; }
public string RoleName { get; set; }
public bool Checked { get; set; }
}
и действие контроллера происходит следующим образом: -
public ActionResult Create(int? uid)
{
var checkBoxList = new[]
{
new RoleCheckboxListViewModel() {
RoleId = "1", Checked = true, RoleName = "item 1" },
new RoleCheckboxListViewModel() {
RoleId = "2", Checked = true, RoleName = "item 2" },
new RoleCheckboxListViewModel() {
RoleId = "3", Checked = true, RoleName = "item 3" },
};
return View(checkBoxList);
}
Проблема, которую я имею сейчас, заключается в том, что на Create.cshtml. Я не вижу список checkbox, но отображается только 123, а также кнопка OK.
Любая помощь была бы очень оценена, потому что я нахожусь в тупике на данный момент.
Возможный дубликат [CheckboxList в MVC3 Просмотр и получение отмеченных элементов, переданных контроллеру] (http://stackoverflow.com/questions/5284395/checkboxlist-in-mvc3-view-and-get-the-checked- items-pass-to-the-controller) –
уже посмотрел на это решение, но не помог, все еще возникают проблемы с сохранением viewModel – Johann
Я не вижу 'public bool Checked {get; задавать; } 'для вашей модели. Пройдите через сообщение, которое я предложил полностью –