2011-03-24 58 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", "_"); 

但是,是這將是很好找到一個系統的方法。

相關問題