我想显示带有某个字段的表单(示例中为一个),提交,保存并显示同一页面并重置所有字段。当我提交时,我会进行“保存”操作,但是当我显示视图时,表单仍然填写。
型号:
public class TestingModel
{
public string FirstName { get; set; }
}
控制器:
public class ChildController : Controller
{
public ActionResult Index()
{
TestingModel model = new TestingModel();
return View(model);
}
public ActionResult Save(TestingModel model)
{
Console.WriteLine(model.FirstName); //OK
//Save data to DB here ...
TestingModel testingModel = new TestingModel() { FirstName = string.Empty };
return View("Index", testingModel);
}
}
观点:
@using (Html.BeginForm("Save", "Child",FormMethod.Post))
{
@Html.TextBoxFor( m => m.FirstName)
<input type="submit" id="btSave" />
}
当Id调试到视图时,在“Immediat窗口”Model.FirstName = ""
中,但是当页面显示时,我仍然发布了值。我在ReditrectionToAction("Index")
方法的末尾尝试了Save
但结果相同。
你有什么想法吗?
谢谢,
答案 0 :(得分:14)
如果你想这样做,你需要清除ModelState中的所有内容。否则,HTML帮助程序将完全忽略您的模型,并在绑定其值时使用ModelState中的数据。
像这样:
[HttpPost]
public ActionResult Save(TestingModel model)
{
//Save data to DB here ...
ModelState.Clear();
TestingModel testingModel = new TestingModel() { FirstName = string.Empty };
return View("Index", testingModel);
}
或者只是在成功的情况下重定向到索引GET
操作:
[HttpPost]
public ActionResult Save(TestingModel model)
{
//Save data to DB here ...
return RedirectToAction("Index");
}
答案 1 :(得分:0)
尝试在没有任何模型的情况下返回Index
视图
return View("Index");
答案 2 :(得分:0)
您应该将表单发布回相同的ActionResult
public ActionResult Index()
{
TestingModel model = new TestingModel();
return View(model);
}
[HttpPost]
public ActionResult Index(TestingModel model)
{
Console.WriteLine(model.FirstName); //OK
//Save data to DB here ...
return RedirectToAction("Index");
}
您也可以使用BeginForm
的无参数重载
@using(Html.BeginForm())
{
//form
}