如何防止在TwitterBootstrapMVC中生成ID属性?

时间:2014-09-16 03:43:07

标签: asp.net-mvc twitter-bootstrap

在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="">

1 个答案:

答案 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