为什么ASP.NET MVC不使用通用操作方法?

时间:2011-01-09 02:45:24

标签: asp.net-mvc

一般问题,当我开始实现ASP.NET MVC时,我发现自己要求,避免通过框架装箱和拆箱(查看“View”的签名),为什么他们不会简单地使用泛型方法进行操作?也许他们“应该”并且他们没有,但也许有人知道一个很好的理由。

提前致谢!

对不起,一个例子就是这样......

Edit(int id)
{
  ...
  if(...)
    View<Contact>("Edit");
  else
    View<ShoppingCart>("Cart");
}

修改 更新的示例更准确地反映我的问题

1 个答案:

答案 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 );