0
我有一个下拉列表,我需要异步反应。我无法让Ajax.BeginForm实际执行异步回发,它只会执行完整的回发。如何异步处理下拉列表更改事件?
using (Ajax.BeginForm("EditStatus", new AjaxOptions { UpdateTargetId = "divSuccess"}))
{%>
<%=Html.DropDownList(
"ddlStatus",
Model.PartStatusList.OrderBy(wc => wc.SortOrder).Select(
wc => new SelectListItem
{
Text = wc.StatusDescription,
Value = wc.PartStatusId.ToString(),
Selected = wc.PartStatusId == Model.PartStatusId
}),
new { @class = "input-box", onchange = "this.form.submit();" }
)%>
<div id='divSuccess'></div>
<%
}
当用户从列表中选择一个项目,但是它完全回发和控制器方法的返回值是屏幕上的唯一输出。我期待控制器方法的返回值显示在“divSuccess”中。
[AjaxAwareAuthorize(Roles = "Supplier_Administrator, Supplier_User")]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditStatus(PartPropertiesViewModel partPropertiesViewModel)
{
var part = _repository.GetPart(partPropertiesViewModel.PartId);
part.PartStatusId = Convert.ToInt32(Request.Form["ddlStatus"]);
_repository.SavePart(part);
return Content("Successfully Updated Status.");
}
OK,这得到回发异步的,但不幸的是,请求对象不再有我的下拉列表。我该如何获得控制器中下拉列表的值。是的,我是ASP.Net MVC的新手,我已经被分配到一个写得不好的应用程序,现在我必须解决这个问题。 –
@Payton Byrd,我已经更新了我的答案,以说明如何使用'$ .post'方法的第二个参数将值传递给AJAX请求:'{ddlStatus:status}'。 –
比你的答案要多得多。我从中学到了很多东西,并且现在代码完美运行。 –