在场景下方,我认为首次加载时我必须在表单中看到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; }
}
答案 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中提取的。