一般问题,当我开始实现ASP.NET MVC时,我发现自己要求,通过框架避免装箱和拆箱(查看"View"的签名),为什么他们不会简单地使用通用方法进行操作?也许他们"应该"但他们没有,但也许有人知道一个很好的理由.
提前致谢!
对不起,一个例子就是这样......
Edit(int id)
{
...
if(...)
View<Contact>("Edit");
else
View<ShoppingCart>("Cart");
}
Run Code Online (Sandbox Code Playgroud)
编辑 更新示例以更准确地反映我的问题
所以我可以这样做:
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
你更新的代码只是语法糖.当MVC管道开始执行操作并呈现视图时,模型仍将获取框和取消装箱.
即便如此,如果你写了这样的东西,我假设你真的想要在某个地方传递一个模型.您的示例不包含它.
public ActionResult View<MODEL>(string view, MODEL viewModel )
{
return View(view, viewModel );
}
Run Code Online (Sandbox Code Playgroud)
泛型参数甚至不重要,因此您最终会看到相同的调用:
return View("Edit", contact );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2311 次 |
| 最近记录: |