2014-01-05 40 views
1

formcollection對象中的值存儲爲鍵值對。但是,假設有人使用「Id」作爲值,「Name」作爲文本來填充下拉列表。在這種情況下,如何使用formcollection對象從下拉列表中訪問「Name」?如何從MVC中的formcollection對象檢索文本

訪問所選值,我知道這個代碼:

public ActionResult ActionName(FormCollection formcollection) 
{ 
    var value = formcollection["dropdownlistName"]; 
} 

上面的代碼會給出一個是「ID」的值,但如果我需要找回「名稱」,並將其存儲在一個變量?

我是新手;如果有人知道,請幫助。您的幫助將不勝感激。謝謝。

回答

1

您不能將下拉列表文本發佈到服務器,您只能發送值。有解決方法 - 您可以手動發佈數據並添加下拉文本。但是,正確的做法是從第一位填寫下拉列表的源代碼中引用id

例子:

如果你有一個下拉這樣的:

<form id="someForm"> 
<select id="country" name="countryddl"> 
    <option value="1">US</option> 
    <option value="2">UK</option> 
</select> 
<input type="submit" value="submit"/> 
</form> 

獲取控制器中的值並將其映射回源。

public ActionResult ActionName(FormCollection formcollection) 
{ 
    var countryId = formcollection["countryddl"]; 
    var countryName = countriesMap[countryId ]; // Assuming countriesMap is a dictionary with all countries mapped to its Id. 

} 

解決方法

如果你絕對必須沿着形式發送的文字,你可以覆蓋提交表單的默認行爲,並與值一起發佈下拉文字:

$("#btnSubmit").click(function(e){ 
    e.preventDefault(); 

    var selectedOption = $("#CountryId option:selected").text(); 
    // Add the selected drop down text to a hidden field 
    $("<input/>",{type:'hidden',name:'countryName'}).val(selectedOption).appendTo("#someForm"); 
    // now post the form 
    $("#someForm").submit(); 
}); 

現在你可以在你的控制器中得到如下所示的文本:

var countryName = formcollection["countryName"]; 
+0

我真的很喜歡你的第一個想法..感謝隊友 – Learner

+0

解決方法是一個不太理想的方法嗎?如果是這樣,爲什麼? –