Я не могу получить модель из вида - PullRequest
1 голос
/ 17 мая 2019

кто-нибудь может мне помочь?

У меня есть модель:

public class EditUserVM
{
    public string Role {get;set;}
    public IEnumerable<SelectListItem> AllRoles { get; set; }
}

У меня есть контроллер:

public class AdminController : Controller
    {
            // GET: Admin/Admin/EditUser/id
            [HttpGet]
            public ActionResult EditUser(string id)
            {
                ApplicationUser user = UserManager.FindById(id);
                EditUserVM model;
                //model initialization
                return View(model);
            }

            // POST: Admin/Admin/EditUser
            [HttpPost]
            [ValidateAntiForgeryToken]
            public async Task<ActionResult> EditUser(EditUserVM model)
            {
                if (!ModelState.IsValid)
                {
                    return View(model);
                }
            //code
                return View(model);
            }
    }

И у меня есть представление:

@model EditUserVM
@using (Html.BeginForm())
{
        <div class="form-group">
            @Html.LabelFor(model => model.Role, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownList("Role", Model.AllRoles, new { @class= "btn btn-light"})
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-success" />
            </div>
        </div>
}

Нокогда я нажимаю кнопку сохранения, то в действии пост-контроллера я не получаю model.AllRoles Я имею в виду, что model.AllRoles == null.Как я могу получить эти значения?

1 Ответ

0 голосов
/ 17 мая 2019

Когда пользователь отправляет форму (которая затем генерирует обратный вызов для варианта [HttpPost] вашего метода EditUser), браузер отправляет только выбранное значение из раскрывающегося списка, а не весь список возможных выборов.На стороне сервера экземпляр модели представления создается и заполняется тем, что отправил браузер.Поскольку браузер не отправил список всех возможных опций, это поле пусто в вашей ViewModel.

Такое поведение имеет смысл.Вам не интересен список возможностей (на самом деле, вы уже ЗНАЕТЕ этот список, потому что вы отправили его в браузер методом [HttpGet]).Вас интересует только фактическое значение, выбранное пользователем.Если ModelState недопустим, и вы используете эту ViewModel для создания нового представления, вам необходимо снова заполнить AllRoles.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...