如何从MVC中的formcollection对象中检索文本

时间:2014-01-05 04:53:33

标签: asp.net-mvc

formcollection对象中的值存储为键值对。但是,假设有人使用“Id”作为值,使用“Name”作为填充下拉列表的文本。在这种情况下,如何使用formcollection对象从下拉列表中访问“Name”?

要访问所选值,我知道以下代码:

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

上面的代码将给出“Id”的值,但如果我需要检索“Name”并将其存储在变量中该怎么办?

我是新手;如果有人知道,请帮助。我们将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

您无法将下拉列表文本发布到服务器,您只能发送值。有解决方法 - 您可以手动POST数据并添加下拉文本。但正确的方法是首先从您填充下拉列表的来源中引用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"];