返回视图不运行控制器代码mvc

时间:2012-08-18 13:01:29

标签: c# asp.net-mvc-3 controller actionresult

我遇到“return view()”的问题,该问题不会在我的控制器中执行代码。

我有一个带有此代码的控制器:

public class BrokerController : BaseController
{

    public ActionResult BestallMaklarBild()
    {
        return View(new BestallMaklarBildViewModel());
    }

    [HttpPost]
    public ActionResult BestallMaklarBild(FormCollection collection)
    {
        try
        {
            //Some code                
            return View("MaklarBildBestalld",new MaklarBildBestalldViewModel());
        }
        catch
        {
            return View(new BestallMaklarBildViewModel());
        }
    }

    public ActionResult MaklarBildBestalld()
    {
       //Some code     
        return View(new MaklarBildBestalldViewModel());
    }
}

当我发布到我的控制器“BestallMaklarBild”然后尝试返回view("MaklarBildBestalld",new MaklarBildBestalldViewModel())时,“MaklarbildBestalld”中的代码不会执行。因此,当模型返回到视图时,它不包含任何数据,并且当我尝试将某些数据输出到视图时,导致我的视​​图出现错误,指出model.something = null

不知道我做错了什么。

2 个答案:

答案 0 :(得分:2)

这是正常的。如果要执行代码,则需要重定向到此控制器操作:

try
{
    //Some code                
    return RedirectToAction("MaklarBildBestalld", new { id = "some id" });
}
catch
{
    return View(new BestallMaklarBildViewModel());
}

现在行动将执行:

public ActionResult MaklarBildBestalld(string id)
{
    //Some code     
    return View(new MaklarBildBestalldViewModel());
}

这是正确的工作流程:

  1. 调用BestallMaklarBild POST控制器操作并传递视图模型
  2. 此控制器操作会尝试持久保存模型,并在MaklarBildBestalld控制器操作成功的情况下重定向,并将唯一标识符作为此模型的查询字符串传递,以便此操作能够检索模型。如果失败,它只需重新显示表单,以便用户可以修复他所做的错误,或者看到错误消息表明处理他的请求时出现问题。

答案 1 :(得分:0)

您必须确保您的视图将参数中的模型作为泛型类型。