【问题标题】:How To Correctly Use the HTML.DropDownList with Ajax Calls for MVC如何正确使用 HTML.DropDownList 与 MVC 的 Ajax 调用
【发布时间】:2013-09-13 07:48:56
【问题描述】:

我使用 SelectList 构造函数(IEnumerable、String、String)以编程方式填充了一个 SelectList

IEnumerable<Permission> ie_SelLstContentAvailPerms; 
tmpLstPermissions =   FilterAssignablePermissionsByRoleMgblty(p_iRoleId,vmRolePermAdmin.lstPermissionsSource);        
//test Forcing Results in to IEnumerable format for Select list Constructor 
ie_SelLstContentAvailPerms = tmpLstPermissions.ToList();
vmRolePermAdmin.selLstPermissionsSource = new SelectList(ie_SelLstContentAvailPerms, "PermissionId", "Name");

我使用 DropDownList 结构:

@Html.DropDownList("ddlAssignedRolePermissions", (Model.selLstCurrentRolePermissions), null, new { @id = "ddlAssignedRolePermissions", @size = "5", @onchange = "ddlAssignedRolePermissionsEvent(this)" })

我之前对这个结构的使用有一个 ajax 调用,它的成功方法正在返回更新的模型----但它的主体(Postify to AssignPermission(iUserID))正在根据在下拉列表

  $.ajax({

            url: "~/../../User/AssignPermission",
            type: "POST",
            data: $.postify({ "p_permId": optionSelectedPerm.value, "p_UserId": iUserId }),
            cache: false,
            success: function () {
                ReloadUserPermissions();
            },
            error: function () {
                // alert("FAIL");  //TODO ?
            }
        });

我试图为新页面复制此结构,但我没有使用 Ajax 调用的成功结果方法,而是尝试在主 ajax 工作中返回更新后的模型。如果上面的示例是结构化的这样就没有成功函数,并且控制器 ActionResult 方法将返回更新的模型。这不起作用。我在调试时在视图中看到数据(更新),但它没有更新视图...

是否必须使用 Ajax 调用的成功函数才能更新视图?

<script type="text/javascript">

        $(document).ready(function () {
            var optionSelectedPerm;
            var mvcTmpData_iCurrentRoleID;
        });

        function SelectedRole(p_lstRole) {
            debugger;
            mvcTmpData_iCurrentRoleID = $("#ddlSelectedRole").val();
            $.ajax({
                url: "~/../../AdminRoles/AdminRolePermissions",
                type: "POST",
                data: $.postify({ "p_nullRoleId": mvcTmpData_iCurrentRoleID }),
                cache: false,
                success: function () {
                        AjaxReloadRolePermissions();
                },
                error: function () {

                },
            });

              function AjaxReloadRolePermissions() {
                //alert("Current RoleID: " + mvcTmpData_iCurrentRoleID);

            var url = '@Url.Action("ReloadRolePermissions", "AdminRoles", new { p_RoleId = "zReplaceRoleId" })';
            window.location.href = url.replace('zReplaceRoleId', mvcTmpData_iCurrentRoleID);
        }

        }

</script>

请注意,为了完成第一个工作场景,在 Ajax 调用中引用的控制器方法“AssignPermission”是类型为 EmptyResult 并标记为 [HttpPost] 的 ActionResult,因此基本上它可以工作而不必担心真正的返回.但 !!同一个 Ajax 调用的 Success 函数允许我使用新调整的 ViewModel 更新视图....

我试图重现我的原始结果失败了我看到了模型内容,但它没有呈现在视图中

【问题讨论】:

    标签: ajax asp.net-mvc


    【解决方案1】:

    如果有人关心它非常简单,Ajax 函数的主要工作不能调用更新视图的控制器操作。然而,Ajax 成功调用可以确保调用控制器的 ActionResults 之一来更新视图,然后在该视图中更新其相关的 Partials ,,,

    需要将 ajax 调用的主要部分中的控制器操作标记为 EmptyResult & [HttpPost]

    真正触发 ActionResult 以更新您的视图的控制器操作,在我的情况下,只返回视图和新修改的模型......再次注意它由前面引用的 ajax 函数的 Success 函数调用上面最后发布的代码几乎涵盖了所有内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多