在MVC3应用程序中,在@{ }
视图中的剃刀块.cshtml
内使用try catch块被认为是不好的做法吗?
答案 0 :(得分:13)
非常。
视图不应包含任何真实的逻辑;任何可能引发异常的东西都属于控制器。
答案 1 :(得分:3)
@{
try
{
<td>
@((TradeType)Enum.Parse(typeof(TradeType), item.AppCode)).GetDescription();
</td>
}
catch
{
<td>@item.AppCode
</td>
}
}
答案 2 :(得分:2)
您的使用取决于您的应用程序的具体情况,但您应尽量保持您的观点。理想情况下,代码有效性将在控制器中得到验证,并且永远不会传递给视图。
答案 3 :(得分:2)
不要将此类代码放入Views中。视图应尽可能仅用于显示标记。您可以在控制器操作方法中放置try catch,该方法将数据提供给视图。
public ActionResult GetUser(int id)
{
try
{
//Get the ViewModel and return the correct View.
}
catch(Exception ex)
{
//log the error
return View("YourErrorView");
}
}
请记住,MVC强调的一个问题是关注点的分离。视图应该是干净且可读的标记。
答案 4 :(得分:1)
我会这么说。最佳路由是将模型传递给控制器在到达视图之前验证的视图。
答案 5 :(得分:0)
这不是一件好事。 MVC框架旨在用逻辑分隔视图。因此,在控制器中保持逻辑应该存在的位置。