Как повторно установить флажок из логического свойства модели в представлении MVC3 - PullRequest
1 голос
/ 04 января 2012

У меня есть два метода редактирования действий пользователя. Первый заполняет флажок правильно с помощью свойства IsAdmin.

public ActionResult Edit(string username)
{
    var user = Membership.GetUser(username);
    var model = Map(user);
    return View(model);
}

Второй метод должен проверять, пытался ли вошедший в систему пользователь попытаться удалить свои собственные права администратора (снял флажок) и заново заполнить флажок, установив для свойства model.IsAdmin значение true. Возвращенная модель заполнена правильно, но флажок не установлен.

    [HttpPost]
    public ActionResult Edit(UserModel model)
    {
        if (model.UserName == User.Identity.Name && model.IsAdmin == false)
        {
            ModelState.AddModelError("", "You cannot remove your own admin privileges");
            model.IsAdmin = true;
            return View(model);
        }

        if (ModelState.IsValid)
        {
            //...
        }
    }

Представление «Редактировать пользователя» выглядит следующим образом

<div class="simpleform">
@using (Html.BeginForm())
{
    <fieldset>
        <div>
            @Html.LabelFor(u => u.UserName)</div>
        <div>
            @Html.TextBoxFor(u => u.UserName)</div>
        <div>
            @Html.LabelFor(u => u.IsAdmin)</div>
        <div>

            @Html.CheckBoxFor(u => u.IsAdmin)</div>
        <br />
        <div>
            <input type="submit" value="Submit" />
            @Html.ActionLink("Cancel", "Index")</div>
    </fieldset>
}

1 Ответ

1 голос
/ 04 января 2012

Удалите значение из состояния модели перед попыткой его изменить, иначе помощник CheckBoxFor будет использовать значение из состояния модели вместо значения в модели представления:

if (model.UserName == User.Identity.Name && model.IsAdmin == false)
{
    ModelState.AddModelError("", "You cannot remove your own admin privileges");
    ModelState.Remove("IsAdmin");
    model.IsAdmin = true;
    return View(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...