详细操作如何工作?

时间:2016-02-05 13:20:49

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

我有一个控制器,我有一些动作。其中之一就是细节动作。 这里:

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()方法只接受视图名称后面的对象。 那么,这有什么样的魔力?

谢谢

1 个答案:

答案 0 :(得分:0)

这有一个非常简单的原因。您正在调用的View()方法正在查找视图名称作为第一个参数,将模型对象作为第二个参数。

为了没有该方法的泛型重载,他们正在寻找的类型是object。由于这是.NET中 EVERY 类型的基本类型,因此您可以提供任何类型作为参数。

您可以像这样设置方法调用,但是当Razor引擎尝试渲染页面并且它具有与预期不同的模型类型时,您会得到运行时异常。