2011-10-31 38 views
0

在過去的幾天裏,我問了幾個問題,可能沒有得到答案,因爲它可能涉及廣泛。經過一番研究,我可能已經縮小了一點。Html.BeginForm包含表單單選按鈕結果的路由值

我想知道是否有一種方法可以使用Begin表單的Html.BeginForm(action,controller,routeValues)重載來傳遞RadioButton結果(即用戶點擊了兩個選項之一)。我需要將該值傳遞給查詢字符串,以便我的操作可以處理它。我的動作需要兩個參數,到目前爲止,我只能弄清楚如何將這些值中的一個值加入動作。下面是一些示例代碼...

<%Html.BeginForm("TemplateInfo","PatientACO",new { PopulationID = ViewData["POPULATIONID"], ActiveAll = "1"});   
%><input type="submit" value="Refresh" id="test" /><% 
%></div> 
<% Html.EndForm(); %> 

注意,我奇妙的設置我的ActiveAll屬性,自動。我需要動態設置它。 IE,它需要由用戶設置。由於該特定操作需要兩個參數。需要找出一種方法將這種動態價值轉化爲行動?我希望routeValue字典或者一般的routValues能夠幫助我找到一種方法來完成這項工作。

如果您有任何想法如何做到這一點,我會非常感激。

UPDATE

我也想提一提,我不想改變控制器接受FormCollections,因爲這個動作是通過其他的方法和觀點調用。有任何想法嗎?

更新2

好,多一點研究,我想什麼,我想是圖了,我怎麼能得到單選按鈕的形式價值的觀點讓我然後可以將它添加到RouteValueDictionary或其他...任何想法?

回答

1

您不需要將選定的值傳遞給查詢字符串。

只要單選按鈕的名稱與控制器操作中的變量名稱相同,MVC就會將表單值綁定到操作中的變量。

在您的例子,如果你的形式與名稱ActionAll一個單選按鈕列表,並與truefalse值兩個單選按鈕,然後如果你的控制器動作有一個布爾變量命名爲ActionAll,你的單選按鈕的結果列表選擇將被綁定到您的控制器操作的ActionAll變量。

UPDATE

根據您提供的信息,如果你的操作方法是這樣的:

[HttpPost] 
public ActionResult TemplateInfo(bool ActionAll, ...) 

然後你就可以通過從按鈕列表ActionAll變量在你看來有以下:

<input type="radio" value="true" id="ActionAll" name="ActionAll" /> All 
<input type="radio" value="false" selected="selected" id="ActionAll" name="ActionAll" /> Not All 

如果您在您的操作中設置了斷點,您將看到已設置了ActionAll基於列表中選定的單選按鈕。如果ActionAll不是布爾值,則相應地調整您的列表,以傳遞正確類型的值以綁定到ActionAll。

+0

你確定嗎?我很確定它不會這樣工作,因爲我遇到了很多嘗試這種方式的錯誤。我不會在這裏聲稱知道這一切,但我有一個理由一直在尋找一種方法來獲得它。無論如何,我改變了我的代碼,以包含代碼並重新修改它。如果你多說一些你的答案,我會將這個問題標記爲答案。 – SoftwareSavant