我正在使用带有Razor的MVC3,我注意到Html帮助函数会生成html标记,这些标记的名称属性就像我要求的那样,但具有id属性的特定格式。如果我尝试生成一个复选框并将“item [0]”作为名称参数传递,我将获得一个复选框,其中“item [0]”为名称,“item_0_”为id。
我猜这是有充分理由的,我猜这个字符串到字符串转换有一个函数吗?你知道哪个功能吗?我需要在我的代码中进行这种类型的转换。
答案 0 :(得分:2)
我认为你在寻找:
GetFullHtmlFieldId
http://msdn.microsoft.com/en-us/library/system.web.mvc.templateinfo.getfullhtmlfieldid.aspx
答案 1 :(得分:0)
这可能是因为[
在html id中无效。这样的功能很容易写自己:
public string SanitizeID(string dirtyID)
{
return dirtyID
.Replace("[", "_")
.Replace("]", "_")
.Replace(".", "_");
// add any other replace as needed
}
修改强>
这个答案可能会指出您正确的方向:Preventing ASP.NET MVC from Replacing period with underscore in Html Helper IDs
编辑2
This post of Scott Hanselman似乎暗示这种行为是在DefaultModelBinder.cs类中定义的。我现在无法检查ASP.NET MVC源代码,但您可能想看一下......
答案 2 :(得分:0)
这可能在asp.net的Control类中 - 看看那里,而不是MVC
答案 3 :(得分:0)
取自Control.ID Property的MSDN页面:
请注意
只有字母数字字符和下划线字符(_)的组合才是此属性的有效值。包含空格或其他无效字符将导致ASP.NET页面解析器错误。
所以看起来你可以使用类似的东西:
string id = ...;
id = Regex.Replace(id, @"\W", "_");
但是,找到一个系统方法会很好。