最近,这个微软的MVC,是在圈内非常的火热,貌似不会mvc,都有点丢人。
这个产品也有很多年了,从mvc3我就关注过,当时觉得不怎么好,就没有用,现在是mvc5了,也关注了下,觉得还是不是太好。也可能是我有点阁僚。
为什么我就非常不喜欢呢?
有句话是这样说的,爱屋及乌 。
而我是 恶其余胥 。
Razor 非常糟糕!
虽然是服务器端的页面解析 引擎,可能比WebPage好多了,但是这个写法,在html代码里面,嵌入了一些服务器端代码,感觉又回到了asp时代,jsp时代,不进反退。
我这么说是因为,好多用mvc的同时是这样写的。
<tbody>
@{
/*通过部门bll绑定循环中有关部门id的字段变为部门名称*/
Base_InstitutionsSetBll bi = new Base_InstitutionsSetBll();
Base_RoleBll br = new Base_RoleBll();
string shzt = null;
}
@if (ViewData["ErrMsg"].ToString() == "")
{
foreach (var item in Model)
{
<tr>
<td class="hidden-480 center">
@item["YHZH"]
</td>
<td class="center">
@item["YHXM"]
</td>
<td class="center">
@{
if (item["SHZT"].ToString() == "1")
{ shzt = "已审核"; }
if (item["SHZT"].ToString() == "0")
{ shzt = "未审核"; }
if (item["SHZT"].ToString() == "2")
{ shzt = "审核未通过"; }
}
@Html.Raw(shzt)
</td>
<td class="center">
@Html.Raw(item["ZHZT"].ToString() == "1" ? "启用中" : "<font color=red>禁用中</font>")
</td>
<td class="center">
@item["ZCSJ"]
</td>
<td class="center">
@item["DLCS"]
</td>
</tr>
}
}
</tbody>
是我这位同事写的糟糕呢?还是大家都是这样?
在Razor视图,也就是View视图层面,出现大量后端程序的代码逻辑,这个是前端程序完全看不懂的。
据说MVC要分层,要做到前后端分离。在视图层,只进行数据的显示,进行一些简单的逻辑,而不是把所有的逻辑放在前端,在前端还进行大量的业务调用,可能还会出现对数据库的操作调用。
如果是在视图层,只写普通的html代码,以及一些扩展的html标签,以及调用一些函数会怎样呢?例如这样……
<tbody>
<eye:foreach collection="${vipUserList}" var="vipuser" index="index">
<tr>
<td>${index}</td>
<td>${vipuser.UserName}</td>
<td>${vipuser.Name}</td>
<td>${vipuser.Gender}</td>
<td>${vipuser.Phone}</td>
<td>${cdatestring(vipuser.CreateDate,'yyyy-MM-dd HH:mm')}</td>
<td>${vipuser.Nickname}</td>
<td>
</td>
</tr>
</eye:foreach>
</tbody>
注:据说mvc6就可以避免出现大量的C#代码了
解析流程特别糟糕!
在使用MVC时,如果需要访问某个页面,是不能访问的,必须有一个控制器,也就是,每个页面对应一个控制器,不然是无法访问的。例如有个视图是logon.cshtml,而页面可能就是个简单的登录框,不需要任何的后台代码,此时,也不能直接进行访问,必须通过一个Action才能访问到。
我这样说对么?
如果我们能直接访问到logon这个页面就好了,例如: /sys/logon.aspx
自定义Route解析规则
mvc的路由规则有点让人很愤怒!
例如,我想让所有不符合规则的请求都请求某个action或者某个页面(不是404页面),这个时候,我傻了,MVC本身不可以这样,只能返回一个404.
我们是不是可以让所有不符合规则的请求,都请求我们自己定义的某个Action呢?(设置404属于mvc的体制范畴之外) 然后我们根据请求,来输出内容。
可能在所有人都把MVC捧为香饽饽的时候,我来这么一篇博文会让他们很不高兴,但我在开发中确实遇到了这样的问题,这些问题不解决。