我用Razor使用MVC3,我注意到Html帮助函数生成的html标签具有他们的名字属性,但具有特定的id属性格式。如果我尝试生成一个复选框并将“item [0]”作为名称参数传递,那么我会得到一个复选框,其中“item [0]”作为名称,而“id_0_”作为id。有没有MVC的功能,将“item [0]”转换为“item_0_”
我猜这是有一个很好的理由,而且我猜测有一个函数将字符串转换为字符串?你知道哪个功能吗?我需要在我的代码中进行这种类型的转换。
我用Razor使用MVC3,我注意到Html帮助函数生成的html标签具有他们的名字属性,但具有特定的id属性格式。如果我尝试生成一个复选框并将“item [0]”作为名称参数传递,那么我会得到一个复选框,其中“item [0]”作为名称,而“id_0_”作为id。有没有MVC的功能,将“item [0]”转换为“item_0_”
我猜这是有一个很好的理由,而且我猜测有一个函数将字符串转换为字符串?你知道哪个功能吗?我需要在我的代码中进行这种类型的转换。
我认为你正在寻找:
GetFullHtmlFieldId
http://msdn.microsoft.com/en-us/library/system.web.mvc.templateinfo.getfullhtmlfieldid.aspx
这可能是因为[
在html标识中无效。这样的功能可按会很容易,虽然自己写:
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
EDIT 2
This post of Scott Hanselman似乎暗示这种行为在DefaultModelBinder.cs类中定义。我现在不能检查ASP.NET MVC源,但你可能想看看那里...
这可能是在asp.net Control类 - 看看那里,没有MVC
从MSDN页采取Control.ID Property:
注
只有字母数字字符和下划线(_)的组合是该属性的有效值。包含空格或其他无效字符将导致ASP.NET页面分析器错误。
所以看起来你应该使用像没事:
string id = ...;
id = Regex.Replace(id, @"\W", "_");
但是,是这将是很好找到一个系统的方法。
这就是我所做的,不过我的,而使用该系统的功能,因为我不知道我需要做哪些其他的替代品。 – durad 2011-03-24 14:01:54
@ 77v - 我已经添加了一个链接到一个答案,可能会让你更接近你想要的...虽然不完全在那里,我会承认... – 2011-03-24 14:27:16