2011-05-19 134 views
71

使用Html.TextBoxFor覆蓋name屬性時可能嗎?ASP.NET MVC 3:用TextBoxFor覆蓋「name」屬性

我試過沒有成功。我需要使用TextBoxFor來獲得客戶端驗證的工作,但是由於我不會進入的原因,我需要文本框的名稱與生成的不同。

我曾嘗試以下:

@Html.TextBoxFor(x => x.Data, new { name = Model.Key + "_Data", id = Model.Key + "_Data" }) 

這爲ID的作品,但不能命名。這可能嗎?

更新:調查TextBoxFor的代碼。它看起來並不像一個簡單的方法。希望有人能證明我錯了。

+0

什麼是 '數據' – archil 2011-05-19 11:46:48

+0

這是一個字符串的數據類型。 – 2011-05-19 11:50:36

+0

好吧,看看我的回答 – archil 2011-05-19 11:57:18

回答

176

羅布,其實還有一個更簡單的方法。取而代之的,使用名稱

@Html.TextBoxFor(x => x.Data, new { Name = Model.Key + "_Data", id = Model.Key + "_Data" }) 
+17

哦哇,它的大小寫敏感lol – highwingers 2013-11-09 21:16:26

+9

區分大小寫是@highwingers,這個小小的細節有可能節省數小時。 – 2013-11-11 08:41:24

+3

Overkill .. Name but id X_X – Vladimirs 2014-01-24 13:56:58

3

一點點 「unpretty」=),嘗試:

@Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData") 
+0

看起來像一個很好的簡單的方法來做到這一點。如果有點hacky :-) – 2011-05-19 11:51:06

+0

umm,這樣,你寧願只是採取正常的Html.TexBox ..因爲任何靜態類型在取代 – 2011-05-19 19:25:38

+0

哈哈johnny之後消失了。我不這麼認爲^^^,你混合靜態和const – benwasd 2011-05-19 19:27:13

8

嘗試EditorFor。如果要確保文本框即使屬性類型不是字符串,也可以傳遞字符串作爲模板名稱。如果屬性已經是字符串,則不需要templatename顯式地呈現文本框,因此您可以通過null。請注意,它不需要顯式地使用id參數,它會從元素名稱中推斷出它。並且所有的驗證內容仍然處於激活狀態。編輯器對於

@Html.EditorFor(x => x.Data, "string", Model.Key + "_Data") 
38

您是否問這是因爲您想對名稱應用前綴?如果是這樣,您可以通過在控制器中設置ViewData.TemplateInfo.HtmlFieldPrefix來實現。

我從Brad Wilson's blog瞭解了很多關於這個東西。

+0

這看起來像贏家!美麗。 – 2011-05-19 12:05:02

+1

是的,他們隱藏了一個很好的沒有他們:) – 2011-05-19 12:08:54

+0

這只是爲我節省了一些頭痛和代碼重複。 – davidXYZ 2014-08-26 17:18:39

7

Ben的回答了我,我一直在尋找的,除非你需要包裝在Html.Raw

@Html.Raw(Html.TextBoxFor(x => x.Data).ToString().Replace("Data", "NewData")) 
10

EditorFor具有過載,你可以提供name屬性作爲參數:

@Html.EditorFor(expression, null, name) 
+3

這應該是被接受的答案 – SOfanatic 2015-09-14 15:23:59

+1

如果我在幾個小時前發現了,我會節省幾個小時,哈哈 – 2016-05-05 01:16:40

1

對於我來說,它的工作原理!我希望有所幫助!

@Html.EditorFor(model => model.Nome, new { htmlAttributes = new { @class = "form-control", @maxlength = "80", @id = "NomeFilter", @Name = "NomeFilter" } }) 
3

這是調用微軟GOTCHA

使用在瓶蓋的名字,像這樣

@Html.TextBoxFor(m => m.Reply.Answer, new {@Name="Whatyouwant"}) 
0
@Html.EditorFor(Model => Model.Something, "name", "name", new {@class = "form-control" }) 

不知道中間那兩個字符串參數的該做的工作,但只有當我輸入他們兩個時才起作用。

+0

第一個參數代表「名稱」屬性,第二個是新名稱...... – ScottLenart 2018-02-02 14:54:30

0

對於這個例子,我是基於權限禁用表單域,但仍然顯示它們。我有一個隱藏字段將值發送到控制器,但在EditorFor中需要一個不同的字段名稱。 模型值後的第一個參數表示「名稱」屬性,其次是新名稱。

@Html.EditorFor(m => m.UserName, "name", "UserNameDisabled", new { htmlAttributes = new { @class = "form-control", @disabled = "disabled"} }); 

結果:

<input class="form-control text-box single-line" disabled="disabled" id="UserNameDisabled" name="UserNameDisabled" type="text" value="someEnteredValue" />