2011-03-24 19 views
1

我用Razor使用MVC3,我注意到Html帮助函数生成的html标签具有他们的名字属性,但具有特定的id属性格式。如果我尝试生成一个复选框并将“item [0]”作为名称参数传递,那么我会得到一个复选框,其中“item [0]”作为名称,而“id_0_”作为id。有没有MVC的功能,将“item [0]”转换为“item_0_”

我猜这是有一个很好的理由,而且我猜测有一个函数将字符串转换为字符串?你知道哪个功能吗?我需要在我的代码中进行这种类型的转换。

回答

0

这可能是因为[在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源,但你可能想看看那里...

+0

这就是我所做的,不过我的,而使用该系统的功能,因为我不知道我需要做哪些其他的替代品。 – durad 2011-03-24 14:01:54

+0

@ 77v - 我已经添加了一个链接到一个答案,可能会让你更接近你想要的...虽然不完全在那里,我会承认... – 2011-03-24 14:27:16

0

这可能是在asp.net Control类 - 看看那里,没有MVC

0

从MSDN页采取Control.ID Property


只有字母数字字符和下划线(_)的组合是该属性的有效值。包含空格或其他无效字符将导致ASP.NET页面分析器错误。

所以看起来你应该使用像没事:

string id = ...; 
id = Regex.Replace(id, @"\W", "_"); 

但是,是这将是很好找到一个系统的方法。

相关问题