定位
解决
现象
如图所示,几个文本框完全是乱的,并且点击登录按钮也没有效果。
贴上我们源码中电子邮箱文本框的代码:
<div class="form-group row"> <div class="col-md-3"> @Html.LabelFor(m => m.Email, new { @class = "control-label" }, ":") </div> <div class="col-md-9"> @Html.TextBoxFor(m => m.Email, new { @class = "email form-control", autofocus = "autofocus" }) </div> @Html.ValidationMessageFor(m => m.Email) </div>
定位
分析上述源码是没有问题的,我们F12看下生成的页面代码,如下:
发现生成的input标签的属性值全为空!!!这是为什么呢?
可能是MVC渲染页面的时候出错,我们更新了Microsoft.AspNet.Mvc.5.2.2、Microsoft.AspNet.WebPages.3.2.2和Microsoft.AspNet.Razor.3.2.2,还是一样的错误,说明不是dll问题。
也可能是我们代码中写了不该写的代码,比如html文本编码出现问题。如下代码段,会引发在mvc渲染好页面后,对html标签属性值置空的操作。
public class HtmlAttributeNoEncoding : System.Web.Util.HttpEncoder { protected override void HtmlAttributeEncode(string value, System.IO.TextWriter output) { StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); base.HtmlAttributeEncode(value, sw); } }
解决
在web.config中 <httpruntime targetframework="4.5.1" encodertype="Nop.Web.Extensions.HtmlAttributeNoEncoding" / >,去掉该编码类型,就可以了。 去掉encodertype代码后,结果如图: