Asp.net mvc 为什么';ASP.NET MVC是否使用通用操作方法?
一般性问题当我开始实现ASP.NET MVC时,我发现自己在问,为了避免通过框架装箱和拆箱(查看“视图”的签名),为什么他们不简单地使用通用方法进行操作?也许他们“应该”,但他们没有,但也许有人知道一个很好的理由 提前谢谢 对不起,一个例子是这样的Asp.net mvc 为什么';ASP.NET MVC是否使用通用操作方法?,asp.net-mvc,Asp.net Mvc,一般性问题当我开始实现ASP.NET MVC时,我发现自己在问,为了避免通过框架装箱和拆箱(查看“视图”的签名),为什么他们不简单地使用通用方法进行操作?也许他们“应该”,但他们没有,但也许有人知道一个很好的理由 提前谢谢 对不起,一个例子是这样的 Edit(int id) { ... if(...) View<Contact>("Edit"); else View<ShoppingCart>("Cart"); } 编辑(int-id) {
Edit(int id)
{
...
if(...)
View<Contact>("Edit");
else
View<ShoppingCart>("Cart");
}
编辑(int-id)
{
...
如果(…)
查看(“编辑”);
其他的
视图(“购物车”);
}
编辑
更新了示例以更准确地反映我的问题,因此我可以这样做:
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 RedirectToAction”,它根本不是一个视图,而仅仅是另一个ActionResult。问题是为什么框架没有通用方法的签名,但是如果框架提供了它,装箱和拆箱就不需要发生,对吗?@Benny-是的。如果框架被设计为非box/unbox,它将不会box/unbox。您可以创建一个自定义ModelBinder,以接收指定为int的联系人,如:Edit(Contact Contact){return View(contect)}此处有更多信息
return View("Edit", contact );