使用AJAX返回SelectList选择的值

时间:2011-01-08 00:49:26

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

有被问及明显的风险......我需要使用AJax.ActionLink将SelectList的当前值发送回我的控制器。我该怎么做?

以下是我当前视图的一部分。我需要用SelectList的当前值替换“15”。

<% If Model.ShoppingListNames IsNot Nothing Then%>
    <%: Html.DropDownList("ShoppingListNames", Model.ShoppingListNames)%>
    <%: Ajax.ActionLink("Add to List", "AdjustMaterials", "Docs",
                        New With {.userDocId = 15, .prodId = Model.ID, .quantity = 1},
                        New AjaxOptions With {.OnSuccess = "handleUpdate"})%>
<% End If%>

使用“answer”来使用Ajax.BeginForm而不是Ajax.ActionLink,下面是我最终使用的View的一部分。

        <% If Model.ShoppingListNames IsNot Nothing Then%>
            <% Using Ajax.BeginForm("AdjustMaterials", "Docs", New With {.prodId = Model.ID}, New AjaxOptions With {.UpdateTargetId = "result-message"})%>
                <%: Html.DropDownList("userDocId", Model.ShoppingListNames)%>
                <input value ="Add to List" type ="submit"/>
            <% End Using%>
            <div id="result-message"></div>
        <% End If%>

以下是控制器。请注意,在调用Ajax.BeginForm时指定了prodId参数,但userDocId参数由表单中SelectList的当前值指定。

<HttpPost()>
Function AdjustMaterials(ByVal userDocId As Integer, ByVal prodId As Integer,
    Optional ByVal quantity As Integer = 1, Optional ByVal itemTag As String = Nothing) As ActionResult

 ' Do stuff...
End Function

2 个答案:

答案 0 :(得分:0)

最好是使用jquery,如下所示:

$(document).ready(function () {
  $('#ShoppingListNames').change(function() {
    var value = $('#ShoppingListNames > option:selected').attr('Value');
    if(value != '') {
      $.ajax({
        type: 'GET',
        contentType: 'application/json;charset=utf-8',
        url: '<%: Url.Action("AdjustMaterials", "Docs", new {prodId = Model.ID, quantity = 1}) %>?=userDocId=' + value,
        data: '',
        dateType: 'json',
        success: function (data) {
          ...
        }
      }
    }
  }
}

控制器:

    public ActionResult AdjustMaterials(string prodId, string quantity, string userDocId)
    {
        ...
        return Json("...", JsonRequestBehavior.AllowGet);
    }

JsonRequestBehavior.AllowGet,因为我使用GET,但如果你使用POST则不是必需的

答案 1 :(得分:0)

实现此目的的一种方法是将下拉列表放在AJAX表单中,并使用提交按钮替换AJAX链接。单击该按钮时,它将使用AJAX将形成的内容提交到所需的操作。