MVC3表格发布价值

时间:2012-02-23 19:37:14

标签: asp.net-mvc asp.net-mvc-3 post razor asp.net-mvc-routing

在场景下方,我认为首次加载时我必须在表单中看到START文本。 当我点击发送数据按钮并提交时,我正在等待查看表格中的FINISH文本。

单击按钮并发布表单后,购买START文本永远不会改变...

任何人都能说出问题吗?

我的控制者:

namespace MvcApplication1.Controllers
{
    public class BuyController : Controller
    {
        public ActionResult Index(BuyModel model)
        {
            if (Request.HttpMethod == "GET")
            {
                model.Message= "START";
                return View(model);
            }
            else
            {
                BuyModel newModel = new BuyModel();
                newModel.Message= "FINISH";
                    return View(newModel);
            }
        }
    }
}

我的观点:

@model MvcApplication1.Models.BuyModel
@using (Html.BeginForm("Index", "Buy", FormMethod.Post))
 {
        @Html.TextBoxFor(s => s.Message)
    <button type="submit" >Send</button>
 }              

我的模特:

public class BuyModel
{
    public string Message { get; set; }
}

2 个答案:

答案 0 :(得分:4)

            public class BuyController : Controller
            {
                public ActionResult Index()
                {
                    BuyModel model = new BuyModel();
                    model.Message= "START";
                    return View(model);
                }

                [HttpPost]
                public ActionResult Index(BuyModel model)
                {
                    model = new BuyModel();
                    model.Message= "FINISH";

                    ModelState.Clear();  // the fix

                    return View(model);
                }
            }

查看:

@model MvcApplication1.Models.BuyModel
@using (Html.BeginForm("Index", "Buy"))
 {
        @Html.TextBoxFor(s => s.Message)
    <button type="submit" >Send</button>
 }   

您的问题是因为原始代码,Action Method只会作为HTTP GET请求执行。 ASP.NET MVC允许您指定具有[HttpPost]属性的帖子(参见上面的代码)。

我不确定您的POST期望行为是什么。看起来你只是在擦除POST上推送的任何表单值。因此,相应地修改我的上述代码,但它应该给你一般的想法。

编辑:似乎文本框在POST后保留其值。它不只是"START",但是如果您在该文本框中输入任何内容并点击提交,那么您提交的文本框中的文本框中的文本完全相同形式。

修改编辑:查看更改后的代码。在您的POST操作方法中调用ModelState.Clear(),您就会反映出正确的值。

答案 1 :(得分:1)

如果您要发布,而不是返回RedirectResult,默认情况下,帮助程序将使用ModelState中的值。您需要清除ModelState或采用不同的方法。

MVC中的PRG(重定向后获取)模式非常重要。因此,如果它是一个帖子,并且您没有重定向,则助手会假设存在需要更正的错误,并且该值是从ModelState中提取的。