在TwitterBootstrapMVC中,剃须刀片段
@Html.Bootstrap().TextBoxFor(m => m.UserName)
生成HTML,如:
<input class="form-control" id="UserName" name="UserName" type="text" value="">
如果在两个控件中使用相同的属性名称,这将导致生成的HTML为INVALID。例如,如果页面包含两个部分视图,则每个部分视图用于具有&#34; UserName&#34;属性。
我尝试了Id(null)
和Id(String.Empty)
,但仍然生成了Id属性。
有没有办法防止生成ID属性?像:
<input class="form-control" name="UserName" type="text" value="">
答案 0 :(得分:0)
在@StephenMuecke的帮助下,解决方案是:
@Html.Bootstrap().TextBoxFor(m => m.AccountName).HtmlAttributes(new {id = (String)null})
但TwitterBootstrapMVC还会生成客户端验证以及需要非空Id
的其他标记,例如,当TwitterBootstrapMVC生成关联的Label时,不能使用null
Id
来复选该复选框。
@Html.Bootstrap().CheckBoxFor(m => m.RememberMe).HtmlAttributes(new {id = (String)null})
因此,当在容器页面内创建相同部分视图的多个实例(例如{{1})时,我可以想到唯一可以避免Id冲突的选项是在整个页面中使其唯一页面有多个部分视图AccountList
实例,每个实例都有一个帐户),这也是@StephenMuecke提到的。部分视图中的TextBox MemberInfo_Partial
:
~/Views/Account/MemberInfo_Partial.cshtml
对于第一次出现在包含页面中,将@f.FormGroup().TextBoxFor(m => m.AccountName).Id(this.UniqueId(m => m.AccountName))
作为Id
,而对于第二次出现,Account-MemberInfo_Partial-AccountName
会出现Account-MemberInfo_Partial-2-AccountName
,依此类推。
UniqueId
的代码在这里:https://gist.github.com/Yaojian/2605701c4885c2629002