【问题标题】:passing dropdown's selected value from view to controller将下拉列表的选定值从视图传递到控制器
【发布时间】:2011-06-04 21:06:22
【问题描述】:

我的 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。

【问题讨论】:

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


    【解决方案1】:

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

    但是,由于您想进行常规回发,因此您需要使用另一个重载 Html.BeginForm,这样您就可以为表单指定一个 ID 属性(我指定了参数名称以防您不熟悉过载)

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

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

    $(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 方法),您始终可以在success 调用中的success 函数中执行window.location.href='redirect/link';

    【讨论】:

    • 我不想使用 ajax。我只想使用 html.beginform 。我该怎么做呢?
    • @DotnetSparrow 好的,您应该能够在表单上使用$.submit 并将点击功能绑定到您要用于提交表单的链接。我会修改我的答案。
    【解决方案2】:

    然后呢 如果未启用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多