ASP MVC 3, как установить свойства модели в контроллере? - PullRequest
1 голос
/ 16 декабря 2011

У меня есть представление с формулой отправки (Html.BeginForm ()), и я хочу установить некоторые свойства модели в контроллере , возвращая представление, надеясь увидеть эти свойства в представлении.

Вот мой шаблон для стандартной формы входа MVC 3.

Точность : Я действительно хочу установить эти свойства в рамках процедуры POST, а не вa GET.

Не могли бы вы объяснить, почему мои свойства, установленные в контроллере, никогда не отображаются в представлении?

 [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        model.RememberMe = true;
        model.UserName = "foobar";

        return View(model);
    }

При представлении, подобном стандартному LogOn.cshtml:

 @using (Html.BeginForm()) {
        <div>
            <fieldset>
                <legend>Account Information</legend>

                <div class="editor-label">
                    @Html.LabelFor(m => m.UserName)
                </div>
                <div class="editor-field">
                    @Html.TextBoxFor(m => m.UserName)
                    @Html.ValidationMessageFor(m => m.UserName)
                </div>

                <div class="editor-label">
                    @Html.LabelFor(m => m.Password)
                </div>
                <div class="editor-field">
                    @Html.PasswordFor(m => m.Password)
                    @Html.ValidationMessageFor(m => m.Password)
                </div>

                <div class="editor-label">
                    @Html.CheckBoxFor(m => m.RememberMe)
                    @Html.LabelFor(m => m.RememberMe)
                </div>

                <p>
                    <input type="submit" value="Log On" />
                </p>
            </fieldset>
        </div>
    }

Ответы [ 3 ]

4 голосов
/ 16 декабря 2011

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

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        ModelState.Remove("RememberMe");
        ModelState.Remove("UserName");
        model.RememberMe = true;
        model.UserName = "foobar";
        return View(model);
    }
1 голос
/ 16 декабря 2011

Насколько я понимаю, ваша проблема: добавьте это действие в ваш контроллер

   /*no http post*/
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        model = model ?? new LogOnModel();
        model.RememberMe = true;
        model.UserName = "foobar";

        return View(model);
    }

Согласно вашему комментарию

   [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        ModelState.Clear();
        model.RememberMe = true;
        model.UserName = "foobar";

        return View(model);
    }
0 голосов
/ 16 декабря 2011

Я думаю, вы не понимаете, что делает флаг [HttpPost].Этот атрибут определяет действие как действие, которое будет использоваться при отправке запроса на сервер как POST.Когда вы впервые просматриваете страницу, стандартным запросом браузера является GET.Ваше действие POST должно проверять учетные данные отправленной формы.

[HttpGet]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    model.RememberMe = true;
    model.UserName = "foobar";

    return View(model);
}

[HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        //Verify input here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...