有被问及明显的风险......我需要使用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
答案 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将形成的内容提交到所需的操作。