保存后显示相同的页面

时间:2011-07-28 09:01:09

标签: asp.net-mvc asp.net-mvc-3

我想显示带有某个字段的表单(示例中为一个),提交,保存并显示同一页面并重置所有字段。当我提交时,我会进行“保存”操作,但是当我显示视图时,表单仍然填写。

型号:

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但结果相同。

你有什么想法吗?

谢谢,

3 个答案:

答案 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
}