2012-06-06 76 views
1

當我發佈FormCollection並嘗試獲取我單選按鈕的值時,它總是取最後一個單選按鈕的值(不管選中哪一個)。它爲什麼這樣做?我的臨時解決方法是創建一個隱藏的值並添加一個onclick JS方法。我試過使用純HTML代碼的結果相同。FormCollection沒有得到正確的值單選按鈕

代碼查看

@Html.RadioButton("Radio", "No", true, new { id = "Radio0"}) + " No"); 
@Html.RadioButton("Radio", "Yes", false, new { id = "Radio1"}) + " Yes"); 

生成的HTML

<input checked="checked" id="Radio0" name="Radio" type="radio" value="No"> No 
<input id="Radio1" name="Radio" type="radio" value="Yes"> Yes 

控制器代碼

[HttpPost, ValidateInput(false)] 
public ActionResult MyPostBack(FormCollection form) 
{ 
    string radio = form["Radio"]; //************** this is always "Yes" 
    return View("MyView"); 
} 
+0

郵寄回來是由第三方控制。無論如何,我可以嘗試使用ViewModel。你可以發佈一個鏈接到一個例子嗎?我想我知道你的意思,但我不確定。 – Lifes

+0

這是DevExpress,我可以控制參數。 – Lifes

回答

0

可能實際上不要複製問題。它可以正確識別控制器上回傳的選定單選按鈕。

你可能要檢查的代碼視圖(與查看您給出的語法,它不應該渲染擺在首位的頁面&應該拋出一個編譯錯誤)

這是視圖,我在測試對

@{ 
    ViewBag.Title = "MyView"; 
} 

<h2>MyPostBack</h2> 
@using (Html.BeginForm()) 
{ 
    @Html.RadioButton("Radio", "No", true, new { id = "Radio0"}) @:No 
    @Html.RadioButton("Radio", "Yes", false, new { id = "Radio1"}) @:Yes 
    <input type ="submit" runat="server" id="btnSubmit" /> 
} 

編輯

根據您的意見,因爲你正在使用DevExpress,先通過提供實況心理狀態。它應該指向正確的方向。做了一些谷歌搜索,發現除了RadioButton擴展名外,還有一個RadioButtonList擴展名。這裏有幾個鏈接可以幫助你。

DevExpress documentation (RadiButtonList)

A working example on using RadioButtonList

A discussion thread on RadioButton(雖然我無法找到關於如何使用RadioButton一個例子,根據線索,您可以使用RadioButton,如果有兩個選擇之間進行選擇的選項;否則,你需要選擇RadioButtonList

而且大家都提到的是投注者傳遞一個Model/ViewModel而不是發送過FormCollection

+0

我正在使用ViewContext.Writer.Write,因爲表單在我不想進入的第三方控件中。我也沒有使用提交按鈕,它是由控件創建的回發。也許這是我使用的控件的一個錯誤。我將製作一個簡單的示例頁面,然後發佈更新。 – Lifes

+0

所以你使用DexExpress MVC擴展。我不認爲有一個錯誤(否則在這個論壇上會有很多討論)。我編輯了我的帖子;看一看。 –