代码之家  ›  专栏  ›  技术社区  ›  Chris

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

  •  0
  • Chris  · 技术社区  · 6 年前

    我正在尝试基于下拉选择填充表单项,而不刷新整个页面或加载新视图。例如,在使用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);
            }
        }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Chris    6 年前

    好 啊。我发现的一种方法是简单地将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);
            }
        }
    

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