【问题标题】:MVC Ajax within ajaxajax 中的 MVC Ajax
【发布时间】:2014-10-05 03:41:28
【问题描述】:
  • 我有一个更新目标“div1”的@Ajax.BeginForm。在这个 div1 中,我有一个 table(某种结果的列表)。

  • 在表格下方,我有“div2”。当用户从 div1 中单击表中的一行时,我想更新此 div2 中的详细信息。我也希望它支持 Ajax。

最好的方法是什么?

【问题讨论】:

  • 你想要的第二件事可以用jquery来完成..
  • 你愿意举个例子吗? :)
  • @Proka..plz 发布一些代码...以便我可以看到并适当地回答...没有看到您实际需要什么我该如何回答..
  • 正如提到的异常,您可以将点击处理程序附加到表中的所有 元素。 OnClickHandler 你可以发送 ajax 请求并更新 div2 并返回结果。

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


【解决方案1】:

是的,这样的事情应该可以解决问题:

@using(Ajax.BeginForm("Action", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "target-id" }))   
    {

    @Html.DropDownListFor(m => m.SomeField, new SelectList(Model.SomeList, "Id", "Name"))

    <div id="stuff-to-be-fetched">

    </div>

...............
}

<script>
 $('#SomeField').change(function () {

    var parameter = $(this).val();
    var url = "@Html.Raw(Url.Action("GetOtherList"))" + "?parameter=" + parameter;

    $.get(url, function (data) {
        $("#stuff-to-be-fetched").html(data);
    });
});
</script>

新动作:

public PartialViewResult GetOtherList(string parameter)
    {
        var list = _service.RetrieveList(parameter);

        return PartialView("_GetOtherList", list);
    }

_GetOtherList.cshtml:

@Html.Label("SomeOtherField)
@Html.DropDownList("SomeOtherField", new MultiSelectList(Model, "Id", "Name")

【讨论】:

  • 如果您不希望在 cshtml 中包含脚本,您可以将 url 存储在一些 html 属性中并使用 javascript 检索它。