簡體   English   中英

MVC和Ajax.BeginForm和DIV.Load

[英]MVC And Ajax.BeginForm and DIV.Load

我有一個部分,它定義了一個Ajax.BeginForm。 返回的模型具有在服務器資源上創建的ReportLink的屬性,該屬性將Url返回給PartialView。

在Ajax上,BeginForm.OnSuccessFunction我正在嘗試使用$("reportContent").load(AJAXRESULT.RenderLink)返回並加載html內容$("reportContent").load(AJAXRESULT.RenderLink)

但是,我在某個地方陷入了無限循環。

編輯添加運動部件:

@model xxxx.Reports.Models.Reports.BaseReportModel
@{Layout = null;}
<div id="reportBase" class="k-content">
<div id="reportControl" >  
@using (Ajax.BeginForm(
          Model.PostAction,          
          Model.PostController,
          null,
          new AjaxOptions() { OnSuccess = "editPostSuccess", OnFailure = "editPostFailure" },
          new { id = "reportBase_frmViewer", name = "reportBase_frmViewer" }))
        {    
            @Html.AntiForgeryToken()            
            @RenderSection("reportParams", required: false)  
            if (@Model.AllowRefresh){
                <input type="button" id="btnRefresh" value="refresh" />
            }
            if (@Model.AllowExportToPDF){
                <input type="button" id="btnPDF" value="PDF" />
            }
            if (@Model.AllowExportToExcel){
                <input type="button" id="btnExcel" value="XLS" />
            }  
            @Html.HiddenFor(p => p.AllowExportToExcel)   
            @Html.HiddenFor(p => p.AllowExportToPDF)
            @Html.HiddenFor(p => p.AllowRefresh)      
            @Html.HiddenFor(p => p.AutoStartReport)   
        }   
    </div>
</div>
<div id="wait"></div>
<div id="reportContent"></div>
//The 
<script type="text/javascript">

    function editPostSuccess(ajaxContext) {
        showWaitIndicator(false);       
        $('#reportContent').load(ajaxContext.RenderLink**,<--This is a link to an asction that calls renderPartial on the controller** function () {
            $("#reportContent").show();
        });
    }

    function editPostFailure(ajaxContext) {
        showWaitIndicator(false);
        var response = JSON.parse(ajaxContext.responseText);
        var errorMessage = response.Message;
        $('#reportContent').html('@Resources.labels.lblServerErrorsOnForm' + " " + errorMessage);
        $("#reportContent").show();
        alert("FAILURE:"+response.Message);
    }

更新:我不再確定瀏覽器是否鎖定。 內容是3.15 MB。 我認為原始html非常冗長,需要花費很長時間才能在瀏覽器中呈現。 這是執行順序:

  1. LoadPartial(ReportModel)-它具有一個Ajax.BeginForm(),它返回報表元數據並具有一個刷新按鈕。 單擊刷新按鈕時。 我調用了一個js函數,該函數使用div.load(ReportModel.RenderLink)加載div,這是一個從控制器以html格式獲取內容的URL。

  2. ReportModel.RenderLink指向控制器方法,該方法基於發送到控制器的模型參數返回html報告。 結果是PartialView(“ ReportContentPartial”,string),其中string是html片段。

  3. 為了測試ReportContentPartial,只需將@Model轉儲為div作為@ Html.Raw(Model),這就是瀏覽器鎖定的地方。 我以為它處於無限循環中,但是渲染html的時間很長。

我不了解的部分是當我使用@ Html.BeginForm並轉儲@ Html.Raw(HTML)時,它非常快。 我需要以某種方式使用該渲染方法中使用的相同機制。 報告html會在不到一秒鍾的時間內獲取並返回。 問題是當我退出@ Html.Raw(HTML)時,瀏覽器鎖定並花費+15秒來呈現內容。

我會繼續堵住它。 我確信有一種更有效的解決方法,我可能需要考慮分解報告的方法。

更新2:這似乎是開發環境問題。 我正在使用run命令從VS2012啟動IE。 我感覺到asp.net開發服務器出現了問題。 當我在chrome中加載相同的url時,在vs中進行調試時,渲染時間不到一秒鍾。

我解決了 似乎.net 40附帶的瀏覽器定義文件存在問題。我求助於使用.aspx頁和回發的報表應用程序的基於表單的版本,以查看為什么它呈現速度快而MVC版本太慢。 使用IE 10時,它將無法呈現,並且我發現_dsoPostBacks在表單版本上不起作用。 然后,我在瀏覽器定義文件上找到了Scott Hanselman的博客 ,並在測試服務器上應用了此修補程序,現在其中的mvc版本以可接受的速率呈現。 它與識別瀏覽器和降級js支持有關。 我不知道為什么這解決了我的問題,但確實做到了:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM