我用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