2014-01-30 41 views
2
foreach (var m in Model.Roles.ToList()) 
{ 
    <div> 
     @Html.Label(m.Id, m.Name) 
     @Html.CheckBox(m.Id, m.Selected, new {id = @m.Id }) 
    </div> 
} 

凡Model.Roles.ToList包含为什么剃须刀不能产生预期的输出?

Id: "5ef15ae7-7e34-4736-98cd-8c472f41869f", Name: "Administrators", Selected: false 
Id: "c11fa932-282a-4273-9cc4-ab181aca5d7a" Name: "Users",  Selected: true 
Id: "c16f8cad-bc32-4539-b2e7-ad82726946b6" Name: "Developers",  Selected: false 

,并会生成以下的输出:

<div> 
     <label for="">Administrators</label> 
     <input id="5ef15ae7-7e34-4736-98cd-8c472f41869f" name="5ef15ae7-7e34-4736-98cd-8c472f41869f" type="checkbox" value="true" /><input name="5ef15ae7-7e34-4736-98cd-8c472f41869f" type="hidden" value="false" /> 
    </div> 
    <div> 
     <label for="c11fa932-282a-4273-9cc4-ab181aca5d7a">Users</label> 
     <input checked="checked" id="c11fa932-282a-4273-9cc4-ab181aca5d7a" name="c11fa932-282a-4273-9cc4-ab181aca5d7a" type="checkbox" value="true" /><input name="c11fa932-282a-4273-9cc4-ab181aca5d7a" type="hidden" value="false" /> 
    </div> 
    <div> 
     <label for="c16f8cad-bc32-4539-b2e7-ad82726946b6">Developers</label> 
     <input id="c16f8cad-bc32-4539-b2e7-ad82726946b6" name="c16f8cad-bc32-4539-b2e7-ad82726946b6" type="checkbox" value="true" /><input name="c16f8cad-bc32-4539-b2e7-ad82726946b6" type="hidden" value="false" /> 
    </div> 

你会注意到的第一件标签= “”没有价值,但当我运行调试器时,这个属性有一个值。关于发生什么的任何想法?

更新:实际问题似乎是以“5”开头的第一个ID。如果我用角色替换它,一切都按预期工作。奇怪的错误。我希望我知道在哪里报告。

+0

我使用了ILSpy中的方法。它使用第一个参数从viewdata获取模型元数据。这很混乱。 – Amy

回答

0

也许剃须刀认为它正在生成一个HTML4或更旧的页面?在HTML4中,ID不能以数字开头;它必须是一个字母字符。有关有效的HTML id值的讨论,请参阅this question。之后,我想我们正在看Razor如何处理这些规则。