ASP MVC 3,如何在控制器中设置模型属性?

时间:2011-12-16 16:01:05

标签: asp.net-mvc-3

我有一个提交公式(Html.BeginForm())的视图,并希望在控制器中设置一些模型属性 ,返回视图,希望在视图中看到这个属性图。

这是我在标准MVC 3登录公式上的模式。

精确度我真的想在POST处理中设置这些属性,而不是在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 个答案:

答案 0 :(得分:4)

如果您想在HttpPost Action中使用,则必须执行以下操作。

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

答案 1 :(得分:1)

据我了解你的问题:将此动作添加到你的控制器

   /*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);
    }

答案 2 :(得分:0)

我认为你在混淆[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
    }