在控制器函数MVC中获取Html.DropDownList值

时间:2017-11-09 13:15:17

标签: c# asp.net-mvc asp.net-mvc-4

单击ActionLink时,我需要获取下拉列表的选定值。

See The ActionLink and DropDownLists

这是我从控制器绑定的下拉列表。

 @Html.DropDownList("resource", new SelectList(ViewBag.ResourceList, ViewBag.SelectedResource), "Resource", new { @class = "span6", @style = "width:14%; color:black;"})

带有[HttpPost]

功能的ActionLink
@Html.ActionLink("Export Data", "ExportData");

我试过Request.Form["resource"],但它一直给我

public ActionResult ExportData()
        {
            var req = Request.Form["resource"];
        }

我只需要获取ExportData函数中DropDownList中的文本值。

2 个答案:

答案 0 :(得分:1)

操作链接基本上会呈现a标记,而a标记看起来大致会像这样;

<a href="ExportData">Export Data</a>

由于链接发出GET请求,因此需要通过以下方式传递任何参数:

<a href="ExportData?resource=xyz">Export Data</a>

Request.Form在get请求中始终为空,因为POST请求会填充表单集合。但无论哪种方式,使用GET或POST请求,您都可以将数据作为操作方法的参数传递,如:

public ActionResult ExportData(string resource)

因此要么将<form>放在要发布到服务器的数据周围,要么将超链接更改为按钮以启动帖子,要么使用javascript追加&#34;?resource = VAL&#34;到超链接HREF属性的末尾,其中VAL是下拉列表中的值。

编辑:在以前我必须这样做的几个场景中,我通常会在链接上添加一个数据属性(在C#API中,使用data_作为数据属性) ):

@Html.ActionLink("Export Data", "ExportData", new { data_url = "ExportData" })

我使用数据属性的原因是为了保留原始网址,这样我就不必进行字符串操作。使用jQuery,在资源值更改时,您可以轻松更新URL:

$("#resource").on("change", function(e) {
  var val = $(this).val();
  var href = $("#linkid").data("url") + "?resource=" + val;
  $("#linkid").attr("href", href);
});

只要下拉列表发生变化,它就会更新链接网址。

答案 1 :(得分:-1)

您应该尝试GetValues()方法:

public ActionResult ExportData()
{
    var req = Request.Form.GetValues("resource");
}