将下拉列表中选定的值从视图传递到控制器

时间:2011-06-04 21:06:23

标签: asp.net asp.net-mvc-2

我的asp.net MVC2视图中有一个下拉列表,如下所示:

<% using(Html.BeginForm("temp","Settings")){ %>
    <%= Html.DropDownList("drpFields", new SelectList(Model.Fields, "FieldID", "NiceName", whiteout.FieldID)) 
}
%>

我希望将下拉列表中的选定值从视图传递给控制器​​操作。我该如何修改:

 <a class="icon-button-success" href='<%: Url.Action("EditWhiteOut", "Settings", new {FieldId = 1}) %>'>
     <img src='<%: Url.Content("~/static/Images/update.png") %>' alt="Update" />
 </a>

我想将下拉列表的选定值传递给FieldId

2 个答案:

答案 0 :(得分:0)

如果您愿意使用Ajax,如果您想使用jQuery.ajax,则可以避免使用该表单。您可能希望为锚点赋予其ID属性的值(下面的示例仅使用其类属性)

但是,既然你想做一个常规的回发,你会想要使用Html.BeginForm的另一个重载,这样你就可以为表单指定一个ID属性(如果你不熟悉,我指定了参数名称)这个超载)

Html.BeginForm(actionName: "temp", controllerName: "Settings", 
    method: FormMethod.POST, htmlAttributes: new { id = "MyForm" })

用于使您的链接提交表单的jQuery将创建一个标准的提交。因此,只要您的选择列表具有名称属性,它的值就会包含在帖子的有效负载中。

$(function () {
    $('.icon-button-success').click(function (e) {
        $('#MyForm').submit();
        // you might not need preventDefault, but I can't remember if 
        // it will create a second post or not
        e.preventDefault();
    });
});

如果您想要进行重定向(使用$.ajax方法),您可以随时在window.location.href='redirect/link';调用中的success函数内$.ajax

答案 1 :(得分:0)

然后呢 如果没有启用js,这将触发表单的javascript提交并提供按钮

<% using (Html.BeginForm(youraction)) {%>

<select name='myfield' onchange='this.form.submit()'>
<option .... >
...
</select>
<noscript><input type="submit" value="Submit"></noscript>
<%}%>

或使用您的代码: 使用jquery更新提交值的值,在这种情况下  的javascript:

var link = Url.Action("EditWhiteOut", "Settings");

jquery的

function toCallOnChange(){
 var linkParameter = $("#id of object").val();
 $("a.icon-button-success").attr("href", link+"\"+linkParameter ); //which will overwrite default value to current link
}


 <a class="icon-button-success" href='#'>
     <img src='<%: Url.Content("~/static/Images/update.png") %>' alt="Update" />
 </a>