ASP.NET MVC:返回视图(ActionName,Model)

时间:2014-04-23 20:00:50

标签: asp.net-mvc asp.net-mvc-4

我正在尝试使用return view (ActionName, Model)将模型传递给某个动作。我已经知道TempData但我的问题是,当我在剃刀中为该模型设置了几个文本框时,例如:

@Html.TextBoxFor (x=> x.Field1)
And
@Html.TextBoxFor (x=> x.Field2)

当我将TempDataRedirectToAction一起使用时,模型中的数据会很好地加载到我的字段中,但是当我使用return View ("ActionName", MyModel)时,它会抛出Value cannot be null exception

我是怎么做到的:

public ActionResult Act1 () {
     Model M = new Model () {Field1="123", Field2="245"};
     return View("Act2", M);
}

这会在此方法有效时抛出异常:

   public ActionResult Act1 () {
     Model M = new Model () {Field1="123", Field2="245"};
     TempData["Model"] = M;
     return RedirectToAction ("Act2");
     // then casting the TempData in the Act2 back to M and it works!
}

我的问题是,为什么Act1方法会导致错误? (剃刀部分完全相同,出于好奇而提出这个问题)

编辑:

 // Without TempData

 public ActionResult Act2 (Model model) {
    return View(model);
}

2 个答案:

答案 0 :(得分:0)

现在查看代码,您需要添加return View()

public ActionResult Act1 () {
     Model M = new Model () {Field1="123", Field2="245"};
     return View("Act2", M);
}

答案 1 :(得分:0)

在您的视图中Act2围绕TempData[Model]并使用if条款,然后检查它是否为空,请使用它,否则请勿使用它。我认为这是问题所在。这就是为什么当你尝试使用它时,它会在你尝试它时抛出一个异常,但它是null。

 if (TempData[Model]!=null)
    {

   //Attempt it here and cast it here
    }
 else
  {
   //Use your model 
  }