在asp.net框架里,mvc框架是我了解的使用最方便、设计最合理的框架。特别是它从架构上提供了很多实用的工具,其中之一便是HtmlHelper,它将程序员从写表单控件标签的繁琐工作中解放出来,同时也减少了服务器端代码与客户端代码搅在一起的局面。HtmlHelper甚至可以帮助我们自动加载对象,为某些表单赋值。我今天就碰到了这样的情况,发生在我把一个隐藏字段命名为“Url ”之后。问题的发生及解决过程如下,我宁愿相信是我对MVC还没有弄明白,还不是MVC自作聪明。
本文的说明都采用先图后文的方式行文,请注意图中用红色框起来的代码部分。
上图说明:在一个项目中,我需要将一条网页的url去掉域名后保存起来,然后再把去掉域名的url地址子字符串写到客户端表单中。如图所示,我准备将它取名为"Url"。(注:为了更加方便地显示在网页上让我抓图,我把它改成了TextBox。)
我怀着无比兴奋的心情,期待在客户端显示的结果为:"/main.html"。
上图说明:我真不敢相信自己的眼睛,由于客户端的域名正是leader.jxcn.cn(我改了自己的hosts,将这个域名指向本机),MVC竟有自动解析相对url地址的能力?我于是开始检查,是不是我的代码写错了?发现写法没有错。
于是我想了半天,决定:调试,是不是我的代码运行到这里时发生了不可思议的事?
上图说明:我在构建模型对象的代码处下了断点,开始调试,果然程序运行到这里时停下来了。我小心翼翼地检查对像各个属性值。不过:newsUrl属性的值正是我想要的:/main.html。
我决定让自己冷静下来,于是我站到窗边,打开窗户,看着楼下变得细微的熙熙攘攘的行人。我的人生很快又过了十五分钟零八秒,此时我决定做最后一搏:将这个表单控件改名再试。
最后的忠告,如无必要,请不要将控件的变量名设为Url或其他系统内置的变量名称。