1

我在控制器上有一个索引操作,如下所示...

public ActionResult Index(string errorMsg = "")
   {
      //do stuff
      ViewBag.ErrorMsg=erorMsg;

      return View();
   }

我还有另一个动作是 Index 的 http 帖子。

当出现问题时,我想重新加载索引页面并显示错误...

我的观点已经有条件地显示 errorMsg。但我不知道如何调用 Index 并传入错误字符串?

4

3 回答 3

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>
 }
于 2012-10-25T22:54:04.313 回答
0

如果我理解正确,您只需要在查询字符串中使用 errorMsg 访问 url:

/*controllername*/index?errorMsg=*errormessage*

但是,当出现问题时,您不一定需要重新加载页面。似乎您可能以错误的方式处理此问题..?

于 2012-10-25T22:53:49.510 回答
0

您可以使用RedirectToActionerrorMsg 值的查询字符串重定向到页面。

[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 是无状态的。如果您想保留表单中的值,请再次返回发布的视图模型对象。我会摆脱 ViewBag 并添加一个名为ErrorMsgViewModel 的新属性并设置它的值。

[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);
  }
}

在视图中,您可以检查此模型属性并向用户显示消息。

于 2012-10-25T22:54:17.867 回答