2011-01-08 48 views
0

有风险询问显而易见的...我需要使用AJax.ActionLink将SelectList的当前值发回给我的控制器。我怎么做?使用AJAX返回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%> 

使用“答案”使用Ajax.BeginForm代替Ajax.ActionLink,是我结束了与视图的一部分。

 <% 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%> 

而下面是控制器。请注意,prodId参数在调用Ajax.BeginForm时指定,但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 
+0

我发现这个有关AJAX窗体的链接很有帮助:http://msdn.microsoft.com/en-us/library/dd381533.aspx – Adventure

回答

0

实现此目的的一种方法是将dropdownlist放入AJAX表单中并替换AJAX lin k提交按钮。点击按钮后,它将使用AJAX将形成的内容提交到所需的操作。

+0

我正在检查你的建议作为答案,因为它符合我的技能,并且让我指出了正确的方向。谢谢! – Adventure

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,但如果使用不necesary POST

+0

看起来很有前途......我会在星期一检查一下,让你知道它是如何去。谢谢! – Adventure

+0

让我知道......它流逝? – SebRojas