HttpPost操作方法,当它所呈现的视图被重新加载时被召回



我有一个接收模型并将其保存到数据库的HTTPPOST操作方法:

[HttpPost]
public ActionResult AddDocument(Document doc){
   DocumentRepository repo= GetDocumentRepository();
   repo.SaveDocument(doc);
   return View(viewName: "DocViewer", model: doc);
}

所以这个方法接收模型,保存它,然后将它返回给DocViewer视图以显示添加的文档。我有两个问题,包括问题中的一个

  1. 如果我在DocViewer出现后按F5,我会得到一个警告,post方法将再次被调用。我该如何避免这种情况?我相信有一个通用的做法
  2. DocViewer视图中,我已经定义了这样的HTML元素:
<div>Full name</div>
<div>@Html.LabelFor(x=>x.FullName)</div> 
<div>Address</div>
<div>@Html.LabelFor(x=>x.Address)</div> //and so on

但是我得到的是以下输出:

Full name FullName
Address Address

我不应该得到实际值,但不是属性名称(或显示名称,如果它提供)?

在Post操作中不将模型对象返回到视图:

[HttpPost]
public ActionResult AddDocument(Document doc)
{
   DocumentRepository repo= GetDocumentRepository();
   repo.SaveDocument(doc);
   //return View("DocViewer");
   TempData["Document"] = doc;
   return RedirectToAction("DocViewer","ControllerName");
}

DocViewer action:

public ActionResult DocViewer()
{
   Document doc = TempData["DocViewer"] as Document;
   return View(doc);
}

更新:

你必须通过它的动作重定向到DocViewer视图,以避免再次表单post,如果F5按下。

查看详细信息

Ehsan的答案确实解决了第一个问题。我不应该返回一个模型对象给视图,而应该重定向到另一个动作方法。第二个问题是由于LabelFor辅助方法的性质引起的。LabelFor只是创建标签,这意味着标签值。为了显示实际值而不使用文本框,有另一个方法称为DisplayTextFor。使用该方法后,我可以得到实际的值

相关内容

  • 没有找到相关文章

最新更新