如何调用Index操作并在ASP.NET MVC应用程序中有条件地传递值

时间:2012-10-25 22:46:59

标签: asp.net asp.net-mvc

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

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

      return View();
   }

我还有一个针对Index的http帖子。

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

我的观点已经有条件地显示了errorMsg。但我无法弄清楚如何调用索引并传入错误字符串?

3 个答案:

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

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