我有一个控制器,我有一些动作。其中之一就是细节动作。 这里:
public ActionResult Details(int id) {
Type x = ReadFromSomewhere(id);
return View(x);
}
我有另一个动作,在更新Type x对象后,它会再次将同一个对象返回到Detail动作。所以:
[HttpPost]
public ActionResult Update(Type y)
{
Some works here...
return View("Details", y);
}
正如您所看到的,我没有将ID传递给return View("Details", y);
但每一件事都有效。为什么?我的意思是,我应该回复这样的事情:
return View("Details", y.Id);
但是View()
方法只接受视图名称后面的对象。
那么,这有什么样的魔力?
谢谢
答案 0 :(得分:0)
这有一个非常简单的原因。您正在调用的View()
方法正在查找视图名称作为第一个参数,将模型对象作为第二个参数。
为了没有该方法的泛型重载,他们正在寻找的类型是object
。由于这是.NET中 EVERY 类型的基本类型,因此您可以提供任何类型作为参数。
您可以像这样设置方法调用,但是当Razor引擎尝试渲染页面并且它具有与预期不同的模型类型时,您会得到运行时异常。