是否有MVC函数将“item [0]”转换为“item_0_”

时间:2011-03-24 13:33:37

标签: asp.net-mvc asp.net-mvc-3 razor

我正在使用带有Razor的MVC3,我注意到Html帮助函数会生成html标记,这些标记的名称属性就像我要求的那样,但具有id属性的特定格式。如果我尝试生成一个复选框并将“item [0]”作为名称参数传递,我将获得一个复选框,其中“item [0]”为名称,“item_0_”为id。

我猜这是有充分理由的,我猜这个字符串到字符串转换有一个函数吗?你知道哪个功能吗?我需要在我的代码中进行这种类型的转换。

4 个答案:

答案 0 :(得分:2)

答案 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", "_");

但是,找到一个系统方法会很好。