2012-01-02 43 views
12

我有一個asp MVC 3項目時,我使用當使用Html.TextBoxFor,作爲前綴加模型的名稱,編號

@Html.TextBoxFor(model => model.Name) 

的TexBoxFor呈現爲

<input id="Name" name="Name" type="text" value="" /> 

我的模型是「UserModel」:

[DisplayName("Name")] 
public string Name{ get; set; } 

有沒有一種方法可以添加到模型的名稱作爲ID前綴?也許有一些屬性?

我想,該文本框將呈現爲

<input id="UserName" name="UserName" type="text" value="" /> 
+4

如果你希望它被稱爲用戶名中的觀點,爲什麼不把它叫做用戶名的模式? – 2012-01-02 08:20:58

+0

我第二次Oyvind的評論,爲什麼有一個屬性,稱爲名稱,裝飾着一個屬性,強制「名稱」,但你想它呈現爲「用戶名」?對我來說似乎很陌生。 – enorl76 2012-01-02 19:02:14

+0

它是一個選項來更改屬性的名稱,但如果有一種方法可以爲所有html hrlpers放置一些屬性,所以它會更好,更容易。 – Kobi 2012-01-05 22:26:45

回答

-2

你可以寫:

@Html.TextBoxFor(model => model.Name, new { @id= "UserName",@Name="UserName" }) 
+0

你的代碼仍然會生成'name'屬性作爲** Name **。所以,這不是他想要的。 – tugberk 2012-01-02 10:21:10

+0

這不是問題。他可以這樣寫:@ Html.TextBoxFor(model => model.Name,new {@id =「UserName」,@ Name =「UserName」}) – Hadas 2012-01-02 10:37:43

+2

這是完全錯誤的!當你使用像'TextBoxFor'這樣的html助手時,你不能重寫'name'屬性。順便說一句,僅供參考,你不需要'''逃脫字符在那裏。你可以使用特殊的C#關鍵字''''''''''''''。 – tugberk 2012-01-02 10:50:48

2

的TextBoxFor助手使用作爲第一個參數傳遞的lambda表達式計算的名稱輸入字段。所以,如果你想生成的輸入字段被稱爲UserName,只需在您的視圖模型屬性重命名:

[DisplayName("Name")] 
public string UserName { get; set; } 
0

你應該從「姓名」到「用戶名」的顯示名稱屬性更改。

[DisplayName("UserName")] 
public string Name{ get; set; } 

如果你這樣做,你會得到你要的東西。

+1

將無法​​使用,該屬性的名稱將是文本框的名稱 – gdoron 2012-01-16 14:43:19

3

如果你不想在你的模型中描述來呈現輸入,你可能不希望使用Html.TextBoxFor幫手。

嘗試Html.TextBox代替。你可以爲它提供你正在尋找的確切值:

@Html.TextBox("UserName", Model.Name, new { id = "UserName" }) 

別忘了你還可以忘記助手,並使用普通的老HTML:

<input id="UserName" name="UserName" type="text" value="@Model.Name" /> 

警告:使用時這些方法和默認模型聯編程序中的任何一個,在提交數據時,此輸入的值將不會正確地返回到您的模型。

+0

您能否稍微解釋一下「警告」部分? MVC中的表單字段是否未在回發中保存? – 2013-07-14 10:10:29

+2

根據輸入名稱將值綁定到模型。因此,在這種情況下,模型聯編程序不知道來自「用戶名」輸入的值對應於模型上的「名稱」值。 – enoshixi 2013-10-14 21:33:52

11
@Html.TextBoxFor(model => model.attr, new { Name = "txt1" }) 

只是用「名」,而不是「名」

+2

-1:這將導致名爲name:「txt1」和name =「attr」的兩個屬性。它在Firefox中起作用,因爲瀏覽器會忽略第二個名稱屬性。但這實際上是一個拙劣的問題。 – 2013-08-09 08:51:36

+1

WOW,我試圖覆蓋HTML屬性中的名稱,並且因爲小寫名稱而不起作用。謝謝。 – DeadlyChambers 2016-04-16 16:40:57

0

如果我明白你的問題正確,你希望能夠到一個字符串前綴到模型的屬性名稱。

因此,如果你是在視圖「帳戶」,您將獲得

AccountName 

而在視圖「測試」,你會得到

TestName 

如果是這樣的話,我認爲最好的方法是重寫PartialFor擴展方法,類似於在這裏完成:

ASP.NET MVC partial views: input name prefixes

在這個例子中,它會呈現

Account.Name and Test.Name 
相關問題