我在控制器上有一个索引操作,如下所示......
public ActionResult Index(string errorMsg = "")
{
//do stuff
ViewBag.ErrorMsg=erorMsg;
return View();
}
我还有一个针对Index的http帖子。
如果出现问题,我想重新加载索引页面并显示错误...
我的观点已经有条件地显示了errorMsg。但我无法弄清楚如何调用索引并传入错误字符串?
答案 0 :(得分:4)
通常,您只需在两个操作之间共享视图。我猜你的动作看起来像这样(你提供的关于索引的信息越多,我的例子就越好):
public ActionResult Index()
{
return View();
}
[HttpPost, ActionName("Index")]
public ActionResult IndexPost()
{
if (!ModelState.IsValid)
{
ViewBag.ErrorMsg = "Your error message"; // i don't know what your error condition is, so I'm just using a typical example, where the model, which you didn't specify in your question, is valid.
}
return View("Index");
}
和Index.cshtml
@if(!string.IsNullOrEmpty(ViewBag.ErrorMsg))
{
@ViewBag.ErrorMsg
}
@using(Html.BeginForm())
{
<!-- your form here. I'll just scaffold the editor since I don't know what your view model is -->
@Html.EditorForModel()
<button type="Submit">Submit</button>
}
答案 1 :(得分:0)
如果我理解正确你只需要在查询字符串中使用errorMsg点击url:
/*controllername*/index?errorMsg=*errormessage*
然而,当出现问题时,您不一定需要重新加载页面。好像你可能以错误的方式接近这个......?
答案 2 :(得分:0)
您可以使用RedirectToAction
重定向到该页面,其中包含errorMsg值的查询字符串。
[HttpPost]
public ActionResult Index(YourViewModel model)
{
try
{
//try to save and then redirect (PRG pattern)
}
catch(Exception ex)
{
//Make sure you log the error message for future analysis
return RedirectToAction("Index",new { errorMs="something"}
}
}
RedirectToAction
发出GET
个请求。因此,您的表单值将会消失,因为 HTTP是无状态。如果要保持表单中的表单值,请再次返回已发布的viewmodel对象。我将摆脱ViewBag并向我的ViewModel添加一个名为ErrorMsg
的新属性并设置其值。
[HttpPost]
public ActionResult Index(YourViewModel model)
{
try
{
//try to save and then redirect (PRG pattern)
}
catch(Exception ex)
{
//Make sure you log the error message for future analysis
model.ErrorMsg="some error";
return View(model);
}
}
在视图中,您可以检查此模型属性并向用户显示该消息。