У меня возникли проблемы с публикацией модели, содержащей словарь. Каждый раз, когда я получаю модель при моем действии контроллера, все значения являются нулевыми (действительно только значения словаря, которые мне нужны), и я не уверен, как это решить или почему это происходит. Ниже вы можете найти мой взгляд (исключая не относящиеся к делу части), мой контроллер и модель просмотра, которую я использую. Идея здесь состоит в том, чтобы передать словарь, связывающий пользователей с ролями, позволить администратору редактировать различные роли пользователя, а затем передать информацию обратно контроллеру, чтобы обновить БД с новой информацией о роли. Мне удавалось сериализовать IEnumerables в прошлом (списки и т. Д.) Таким образом, но не могу заставить его работать для словаря. Вся помощь приветствуется.C# MVC- публикация viewmodel, которая содержит словарь
The View:
@model RecipeManager.ViewModels.AdminViewModel
@{
ViewBag.Title = "Index";
}
<h2>Admin</h2>
@using (Html.BeginForm("UpdateRoles", "Admin", FormMethod.Post))
{
<div>
@for (int i = 0; i < Model.UsersAndRoles.Count; i++)
{
<strong>@Model.UsersAndRoles.ElementAt(i).Key.UserName</strong>
@Html.DropDownListFor(m => m.UsersAndRoles.ElementAt(i).Value, Model.RoleTypes, Model.UsersAndRoles.ElementAt(i).Value, new { @class = "form-control" })
}
</div>
<input type="submit" value="Update Roles" />
}
Пример HTML произвел имя пользователя и администратора роли выпадающее меню:
<strong>[email protected]</strong> <select class="form-control" id="Value" name="Value"><option value="">Cook</option>
<option value="1">Admin</option>
<option value="2">Cook</option>
<option value="3">Retail</option>
</select>
контроллер действия (в AdminController
):
[AuthorizeUser(Activity = "ViewAdmin")]
[HttpPost]
public ActionResult UpdateRoles(AdminViewModel vm)
{
return View("Index");
}
И ViewModel (AdminViewModel
):
namespace RecipeManager.ViewModels
{
public class AdminViewModel
{
public SelectList RoleTypes { get; set; }
public String SelectedRole { get; set; }
public String InviteEmailAddress { get; set; }
public Dictionary<ApplicationUser, string> UsersAndRoles { get; set; }
}
}
Не могли бы вы показать HTML, который испускается этим кодом бритвы? – Crowcoder
Вы проходите сериализованный объект? – Karolis
Возможный дубликат [Правильный, идиоматический способ использования настраиваемых шаблонов редактора с IEnumerable-моделями в ASP.NET MVC] (http://stackoverflow.com/questions/25333332/correct-idiomatic-way-to-use-custom-editor- templates-with-ienumerable-models-in) – GSerg