DotNetNuke mvc 在 SelectList 更改时填写表单项

DotNetNuke mvc fill in form items on SelectList change

我正在尝试根据下拉选择填充表单项,而不刷新整个页面或加载新视图。例如,这在使用 UpdatePanel 的 Web 表单中相当简单。但是,我不能让它在 MVC 中工作。

我已经尝试了很多我能找到的解决方案。我不知道这是否是 DotNetNuke 问题。

调试显示控制器触发并检索记录,但从未填充表单项。

我已经尝试了 jquery.post 和 .ajax 调用。都不行。

查看:

@inherits DotNetNuke.Web.Mvc.Framework.DnnWebViewPage<IMS.Model.lh.Associations>
@using IMT.LH.AssociationAdmin.Models
@using IMS.Model.lh
@{
    ViewBag.Title = "Association";
}

<h2>Association</h2>
<div id="Associations-@Dnn.ModuleContext.ModuleId">
    @Html.DropDownList("SelectAssociation")
</div>
<div id="Association-@Dnn.ModuleContext.ModuleId">'
    @Html.LabelFor(m=>m.AssociationID)<br />
    @Html.Label("Title")<br />
    @Html.Label("Slug")<br />
    @Html.Label("Description")<br />
    @Html.Label("Tagline")<br/>

</div>
<script type="text/javascript">
    const rvtoken = $("input[name='__RequestVerificationToken']").val();
    const moduleId = @Dnn.ModuleContext.ModuleId;
    const tabId = @Dnn.ModuleContext.TabId;
    $.ajaxSetup({
        headers: {
            "RequestVerificationToken": rvtoken
        }
    });
    $('#SelectAssociation').change(
        function() {
            $.post(
                    "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
                    {
                        id: $(this).val()
                    }),
                function() {
                    alert("success");
                }
            /*$.ajax({
                url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
                method: "Post",
                data: {
                    id: $(this).val()
                },
                headers: {
                    "ModuleId": moduleId,
                    "TabId": tabId,
                    "RequestVerificationToken": rvtoken
                },
                success: function() {
                    alert("success");
                },
                fail: function() {
                    alert("fail");
                }
            });
            */
        });
</script>

控制器:

   [HttpPost]
    [DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
    public ActionResult SelectAssociation()
    {

        ModelState.Clear();
        int id = Convert.ToInt32(Request.Form["id"]);
        using (var ac = new AssociationsController())
        {
            ac.GetById(id);
            return PartialView("Index", ac.CurrentRec);
        }
    }

好的。我发现的一种方法是简单地 return 一个 json 对象到 .ajax 调用并解析它:

        $.ajax({
            cache: false,
            dataType: 'json',
            url: "/DesktopModules/MVC/LH.AssociationAdmin/Association/SelectAssociation",
            method: "Post",
            data: {
                id: $(this).val()
            },
            headers: {
                "ModuleId": moduleId,
                "TabId": tabId,
                "RequestVerificationToken": rvtoken
            },
            success: function(data) {
                //alert(data.AssociationID);
                $('#AssociationID').text(data.AssociationID);
                $('#Title').text(data.Title);
                $('#Slug').text(data.Slug);
                $('#Description').text(data.Description);
                $('#Tagline').text(data.Tagline);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(textStatus);
                console.log(errorThrown);
                console.log(jqXHR);
            }
        });
    });

控制器:

    [HttpPost]
    [DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
    public ActionResult SelectAssociation()
    {

        ModelState.Clear();
        int id = Convert.ToInt32(Request.Form["id"]);
        using (var ac = new AssociationsController())
        {
            ac.GetById(id);
            return Json(ac.CurrentRec);
            //return PartialView("Index", ac.CurrentRec);
        }
    }

但是,我当然愿意接受其他建议。