一般问题,当我开始实现ASP.NET MVC时,我发现自己要求,避免通过框架装箱和拆箱(查看“View”的签名),为什么他们不会简单地使用泛型方法进行操作?也许他们“应该”并且他们没有,但也许有人知道一个很好的理由。
提前致谢!
对不起,一个例子就是这样......
Edit(int id)
{
...
if(...)
View<Contact>("Edit");
else
View<ShoppingCart>("Cart");
}
修改 更新的示例更准确地反映我的问题
答案 0 :(得分:6)
所以我可以这样做:
public ActionResult Customer(int id )
{
try
{
var customer = DB.GetCustomer(id);
if( customer == null )
{
return RedirectToAction("NoCustomerFound");
}
if( customer.IsApproved )
{
return View( TransformToApproved("Approved", customer);
}
return View( "Unapproved", TransformToUnapproved(customer));
}
catch(Exception e )
{
return View("Error", e );
}
}
更新
您更新的代码只是语法糖。当MVC管道开始执行操作并呈现视图时,模型仍将获取框和取消装箱。
即便如此,如果你写了这样的东西,我假设你真的想要在某个地方传递一个模型。您的示例不包含它。
public ActionResult View<MODEL>(string view, MODEL viewModel )
{
return View(view, viewModel );
}
通用参数甚至不重要,因此您最终会看到相同的调用:
return View("Edit", contact );