我的Index.cshtml
@model ReportGenerator.WebUI.Models.ReportViewModel
@Html.TextBoxFor(m => m.report.FileName, new { @class = "form-control", id = "FileName" })
我的控制器
public ActionResult Index(ReportViewModel model)
{
...some stuff
model.report = new Report();
model.report.FileName = "INDEX";
return View(model);
}
public ActionResult fillFields(ReportViewModel _model)
{
...some stuff
_model.report = new Report();
_model.report.FileName = "FILL";
return View("Index", _model);
}
当我运行我的应用程序时,
TextBox
的Text
属性被设置为“INDEX”。当我单击调用fillFields
控制器操作的按钮时,TextBox
仍然显示“INDEX”,而不是更改为“FILL”。我做错了什么?为什么它不想工作?
fillFields()
方法拥有一个ReportViewModel
参数,因此当方法被初始化时,它的值会被添加到ModelState
中。当你返回视图后,你的TextBoxFor()
方法使用ModelState
中的值(而不是模型属性)来设置文本框的值。这种行为的原因在这里有解释。正确的方法是遵循 PRG 模式。 - user3559349ModelState.Clear()
。遵循PRG模式并进行重定向! - user3559349Index()
方法不应该有一个名为ReportViewModel model
的参数(它可能会因为多种原因而失败,并且会创建一个丑陋的查询字符串)。虽然你的意图不是很清楚,但最好的猜测是应该使用public ActionResult Index(string fileName)
,然后初始化你的模型并设置FileName
属性。在 POST 方法中,使用return RedirectToAction("Index", new { fileName = "FILL" });
。 - user3559349