2015-09-16 62 views
2

在我問我的問題之前,讓我說我DID看起來在線,並且我爲這個問題尋找堆棧溢出,DID找到某些解決方案,但沒有找到我找到的工作。所以我在這裏問希望得到這個問題的答案,並感謝任何幫助。BeginForm更改「名稱」值

我正在做一個表單發佈到外部網站。在我的模型我在我的LoginViewModel執行以下操作創建的所有值:

public string returnurl { get; set; } 

在我的構造函數中我設置需要像這樣的價值觀:

returnurl = "www.retururl.com"; 

在我的索引我頁面後像所以用MVC 4.0剃刀:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm", @action = Model.loginUrl })) 
{ 
    @Html.HiddenFor(model => model.returnurl) 
} 

當我檢查小提琴手它在幕後執行以下操作:

<input id="returnurl" name="returnurl" type="hidden" value="www.returnurl.com"> 

它使輸入ID和名稱變量returnurl的名稱。

我的問題是,我的表單中的一個名稱值必須是「bb-post」。我顯然不能在我的loginViewModel中命名一個變量bb-post,所以我嘗試的只是設置名稱爲bb_post,然後在我的索引頁中。

所以,我做了以下內容:

@Html.HiddenFor(model => model.bb_post, new { name = "bb-post" }) 

但這並沒有工作,當我檢查小提琴手它做了以下內容:

<input id="bb_post" name="bb_post" type="hidden" value="" /> 

我也試過這樣:

@Html.HiddenFor(model => model.bb_post, new { @name = "bb-post" }) 

但得到這個:

<input id="bb_post" name="bb_post" type="hidden" value="" /> 

最後嘗試這樣:

@Html.HiddenFor(model => model.bb_post, new { @Name = "bb-post" }) 

,但得到這個:

<input Name="bb-post" id="bb_post" name="bb_post" Name="bb-post" type="hidden" value="" /> 

使用資本的名稱,以便@Name給了我兩個名稱值。這不是我正在尋找的。

我也知道我可以這樣直接寫到HTML:

<input id="bb_post" name="bb-post" type="hidden" value="" /> 

但爲了讓這一切我希望有一種方法來保持這種格式面色不變:

@Html.HiddenFor(model => model.bb_post, new { @Name = "bb-post" }) 

謝謝。

編輯: 我確實在推薦的問題中找到了答案,但接受的答案並不正確。我一定沒有仔細看過被接受的答案(我通常會這樣做並道歉)。但是,如果其他人不小心跳過對接受的錯誤答案(這是錯誤的,因爲它會生成兩個名稱值),那麼以下是有效的。 這是正確的答案,什麼爲我工作:

@Html.Hidden("bb-post", Model.bb_post, new { id="bb-post" }) 

謝謝。

+0

可能重複的[ASP.NET MVC 4重寫發射的html名稱和id](http://stackoverflow.com/questions/14810100/asp-net-mvc-4-override-emitted-html-名稱和編號) – James

+0

你不需要在設置名稱時使用@只需使用'new {Name =「bb-post」})' – JamieD77

+0

問題中接受的答案實際上是錯誤的,我在嘗試後意外跳過了它它並沒有工作。下面的答案儘管@James工作,我編輯我的問題提供的信息。 – Fro1

回答

0

我只是嘗試以下操作:

@Html.HiddenFor(x => x.Client, new {id="bb-post", @Name = "bb-post"}) 

,得到了這樣的結果 <input name="bb-post" id="bb-post" type="hidden" value="BDOObject.Client">

所以,如果你設置@Name大寫 'N'和id,它的工作原理..如果我沒有設置id,它需要原始值bb_post爲id ...但@大寫字母N似乎工作...

編輯: 所以顯然它似乎工作,因爲Chrome清理html。但根據this answer by nemesv,你是關閉使用@ Html.Hidden在@ Html.Hiddenfor更好,就像這樣:

@Html.Hidden("bb-post", Model.bb_post, new { id="bb-post"}) 

因爲Html.Hiddenfor試圖從你的模型,這是什麼使得它不同的占卜name屬性從Html.Hidden

+0

我剛剛嘗試過,雖然它將ID更改爲「bb-post」,而Name =「bb-post」,但仍然有一個名稱=「bb_post」。所以現在有兩個Name值分別是小寫字母和大寫字母。 – Fro1

+0

@ Fro1好吧對我來說,它似乎工作,但顯然這是一個行爲的鉻清理的HTML ..這個答案由nemesv給出了更詳細的解釋:http://stackoverflow.com/a/14810169/2422173 .. 希望這有助於! –

+0

是的,這是爲我工作的。謝謝! – Fro1

1

有什麼不好做

<input id="bb-post" name="bb-post" type="hidden" value="@model.bb_post" /> 
+0

那麼我正在做一個大約20個輸入的帖子,我正在做的所有格式是這樣的:@ Html.HiddenFor(model => model.appName) @ Html.HiddenFor(model => model。 (模型=> model.astros) @ Html.HiddenFor(model => model.returnurl) @ Html.HiddenFor(model =>) model.texans2) @ Html.HiddenFor(model => model.astros2) @ Html.HiddenFor(model => model.rockets2) 有沒有什麼問題,我想保持一切? – Fro1

+0

我其實在我的帖子中說過,我希望它們都保持不變。如果這是不可能的,那麼我會這樣做。 – Fro1

+0

@AndreiM是的,它是一個可行的解決方案。這可能不是OP想要的解決方案,但它是一個完全相同的解決方案。 – James