当前位置: 首页 > 知识库问答 >
问题:

如何在ASP.NET MVC中用Ajax调用刷新partialview?

成和悌
2023-03-14

我有一个部分视图,我正在发送两个参数,然后尝试使用$(“#div”).html(结果)刷新部分视图div。使用mvc操作将数据正确地发送到partial view,并且我在控制台中看到partial view正在通过ajax调用进行更新。所有工作都按预期进行,但mainview中的部分视图从未得到更新或刷新。所以我总是第一次看到SubscriptionID和EntityOrganizationID被初始化,即0。这是一个有点紧急和新的这个,它将真的很好,如果您可以看一下代码和帮助。

这是main.cshtml中的partialview

<div id="myPartialViewDiv">
     @Html.Partial("_SubmissionCommentActions", new SubmissionHeaderActionViewModel());
</div>

这是我从Java脚本函数中调用的ajax--在单击按钮后调用

$.ajax({
            url: '/Submission/SubmissionHeaderDetails',
            type: 'POST',
            async: false,
            dataType: 'html',
            data: { id: SubmissionID, entityOrgID: EntityOrganizationID, tab:0 },
            success: function (result) {
                console.log('Success... : ' + result);
            }
        }).done(function (response) {
            alert('refore replacing partial view with latest data');
            $("#myPartialViewDiv").html(result);
        });

这是我的行动-

[HttpPost]
    public ActionResult SubmissionHeaderDetails(int? id, int? entityOrgID, SubmissionTabEnum tab = SubmissionTabEnum.None)
    {
        SubmissionHeaderActionViewModel newModel = new SubmissionHeaderActionViewModel();
        newModel.SubmissionID = (int)id;
        newModel.EntityOrganizationID = (int)entityOrgID;

        return PartialView("_SubmissionCommentActions", newModel);
    }

这是我的部分视图_SubmissionCommentActions.cshtml

@model XYZ.Domain.Model.Submission.SubmissionHeaderActionViewModel

<script>
    $(function () { $('[data-toggle="tooltip"]').tooltip();})
</script>

    @{
        // I get correct SubmissionHeaderID, EntityOrganizationID values every time using ajax call but they never gets refreshed inside "headerCommentModal" div
        var SubmissionHeaderID = 0;
        int EntityOrganizationID = 0;
        if (Model != null){
            SubmissionHeaderID = Model.SubmissionID;
            System.Diagnostics.Debug.WriteLine("SubmissionHeaderID : " + SubmissionHeaderID);
        }
        if (Model.EntityOrganizationID != null){
            EntityOrganizationID = (int)Model.EntityOrganizationID;
            System.Diagnostics.Debug.WriteLine("EntityOrganizationID : " + EntityOrganizationID);
        }
        Model.SubmissionID = SubmissionHeaderID;
        Model.EntityOrganizationID = EntityOrganizationID;
    }
    
    @Html.Hidden("SubmissionHeaderID", SubmissionHeaderID, new { data_ng_model = "model.SubmissionHeaderID" })
    
    @Html.JsonDataSourceVariable("securitygroupsusers", "SecurityGroupsUsersAccessRight", "Utility", Model.EntityOrganizationID.GetValueOrDefault())
    
    <!-- _SubmissionHeaderActions  start  -->
    <div class="stayenabledonclose">
        <div class="form-horizontal" ng-controller="submissionHeaderActionsController">
            <div id="headerCommentModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="submissionComment-title" style="padding-right:19px;">
                <div class="modal-dialog" role="document">
                    <div id="adcmodal" class="modal-content">
                        <div id="adcmodal" class="modal-header col-nopadding ">
                            <h3 class="modal-title" id="submissionComment-title">Submission Comment | SubmissionID: @Model.SubmissionID | EntityOrganizationID : @Model.EntityOrganizationID</h3>
                            <button type="button" class="close pull-right" data-dismiss="modal" aria-label="Close">
                                <span aria-hidden="true"><i class="fas fa-times"></i></span>
                            </button>
                        </div>
                        <div class="modal-body submissioncomment-modal-body">
                            <div class="row form-group spacer">
                                <div class="col-md-12">
                                    <div class="col-md-12">
                                        @Html.Label("Recipients")
                                        <select id="commentrecipients" class="dirtyignore" kendo-multi-select k-options="securitygroupsusersSelectOptions()" k-ng-model="initSecurityGroupsUsers()"></select>
                                    </div>
                                </div>
                            </div>
    
                            @Html.Hidden("SubmissionHeaderID", SubmissionHeaderID)
                            <div class="row form-group spacer">
                                <div class="col-md-12">
                                    <div class="col-md-12">
                                        @Html.Label("Comment (will be sent to the recipients via email)")
                                        @Html.TextArea("Comment", "", new { @class = "form-control dirtyignore", rows = "2", maxlength = "1000", data_ng_model = "model.comment" })
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- _SubmissionHeaderActions  end  -->
    
    @using (Html.RequiredScripts())
    {
        @Html.RequirePageScript("Shared", "SubmissionHeaderActions")
    }

下面是SubmissionHeaderActionViewModel类

namespace XYZ.Domain.Model.Submission
{
    [DataContract]
    public class SubmissionHeaderActionViewModel
    {
        //fields will be used to determine display of action items
        [DataMember]
        public bool CanReassign { get; set; }

        [DataMember]
        public bool CanEditComments { get; set; }

        [DataMember]
        public bool CanClone { get; set; }

        [DataMember]
        public bool CanTransfer { get; set; }

        [DataMember]
        public bool CanCreateNew { get; set; }

        [DataMember]
        public int SubmissionID { get; set; }

        //export/print actions are under a sub menu in the header

        [DataMember]
        public bool CanExport { get; set; }

        [DataMember]
        public bool CanExportPdf { get; set; }

        [DataMember]
        public bool CanExportCsv { get; set; }

        [DataMember]
        public bool CanPrint { get; set; }

        [DataMember]
        public bool CanGetArchive { get; set; }

        [DataMember]
        public bool CanDeleteArchive { get; set; }

        [DataMember]
        public bool ShowSubMenu => CanExportCsv || CanExportPdf || CanPrint || CanGetArchive || CanDeleteArchive;

        [DataMember]
        public int? ArchiveStatusTypeID { get; set; }

        [DataMember]
        public int SubmissionStatusTypeID { get; set; }

        public int? EntityOrganizationID { get; set; }

    }
}

共有1个答案

路和悌
2023-03-14

也许改进动作也是个好主意:

public ActionResult SubmissionHeaderDetails(SubmissionHeaderActionViewModel 
       model)
    {
    
        return PartialView("_SubmissionCommentActions", model);
    }

并通过将结果从done移动到success来修复ajax:

$.ajax({
            url: '/Submission/SubmissionHeaderDetails',
            type: 'POST',
            data: { SubmissionID : SubmissionID, 
                    EntityOrganizationID: EntityOrganizationID, 
                   tab:0 },
            success: function (result) {
            $("#myPartialViewDiv").html(result);
            },
            error: function (xhr, exception) {
                ...error code
                return false;
            }
        });
 类似资料:
  • 问题内容: 我正在开发一个新项目http://www.hotwirerevealed.com,该项目可以在hotwire.com上显示/识别酒店。输入状态和目的地后,我有了一个使用jquery的.post方法发布的javascript函数。发布请求转到输出html的php页面,我使用jquery的html方法将内容放置在页面上。 像这样 我有超链接,指向要在灯箱中使用的酒店 我试图使用jQuery

  • 问题内容: 在ajax调用后,我无法停止刷新页面。我已经尝试通过放置e.preventDefault(); 并返回false;同样,但我的页面再次刷新。 我不知道代码或某些问题是什么。请帮助我在ajax调用后停止刷新页面。解决这个问题将对我有很大的帮助。提前致谢。 这是我的代码: 问题答案: ID是否指向表单?如果是,则需要侦听Submit事件而不是单击click。如果您确实需要监听click事件

  • 问题内容: 我的ajax调用输出始终显示0,因为输出不知道为什么 在我有这段代码 我的ajax调用是在javascript中 我没有使用插件就在wordpress中进行ajax调用,但是没有得到我正在传递的内容,即使输出$ abc仍然显示0。 问题答案: 在后端,WordPress本身定义了全局ajaxurl变量。 该变量不是由WP在前端创建的。这意味着,如果要在前端使用AJAX调用,则必须自己定

  • 问题内容: 我想使用Ajax更新MVC中的表格。我已经使用ajax在数据库中插入了数据。我只想在插入新行后更新表。 PS。我尝试搜索,但没有任何帮助,我仍然感到困惑。 用于插入新记录的Ajax代码: 问题答案: 您可以创建一个操作方法,该方法返回呈现表所需的HTML标记。让我们创建一个视图模型,通过该模型我们将传递表数据。 现在,在您的操作方法中,从表中获取数据,加载到我们的视图模型类的列表中并发

  • 问题内容: 我有一个包含许多ListView的页面,我希望用户能够对它们进行排序和翻页。我不想每次都回发并重新绑定整个页面,而是希望通过jQuery / AJAX有选择地针对所涉及的控件进行操作。我很容易在页面中对WebMethod进行客户端调用- 我的问题是如何通过jQuery将返回的数据返回到ListView中? (注意:我不想使用UpdatePanel!) 问题答案: 我不确定仅由于List

  • 问题内容: 我正在尝试使用AJAX和JQuery(在Django中)刷新页面的特定部分。如何获取仅重新显示div而不重新显示整个页面的信息。 这是我的看法。 当前,它将整个html页面放入#tag_page div中。我希望它用新的#tag_page div替换旧的#tag_page div。如果替换为它,则将整个页面刷新到应有的状态,但是我认为刷新整个页面是一种浪费。 如果有更好的方法,请告诉我