簡體   English   中英

在MVC 4中加載ajax成功方法的部分視圖

[英]Load Partial View on ajax success method in MVC 4

問題陳述 :查看無法加載ajax成功方法。

描述 :我有幾個下拉級聯(基於第一個值的第二個綁定)。 在更改第一個下拉列表時,我將綁定第二個下拉列表並再次更改第二個下拉列表,現在在右側,我想顯示基於兩個下拉列表值的記錄列表。

為此,我在下拉列表2的onchange事件中使用以下JS代碼:

function ShowDocsList() {
        var teamId = $('#TeamID').val();
        var projectId = $("#ProjectID").val();
        var Url = "@Url.Content("~/DocsHome/DocsList")";
        $.ajax({
            url: Url,
            type:'POST',
            dataType: 'html',
            data: { TeamID: teamId ,ProjectID : projectId},
            success: function (data) {
            return data;
              $('.docs-detail').html(data);
            }
        });

在DocsHome控制器中,DocsList方法在第二個下拉列表的更改中受到影響,這是項目下拉列表。但是視圖沒有被渲染。以下是我的控制器代碼:

 public ActionResult DocsList(int teamId, int projectId)
        {
            List<CustomerViewModel> customerViewsModels = SmartAdminHelper.GetCustomers(db1);
            if (Request.IsAjaxRequest())
                return PartialView("DocsList");
            else
                return View("DocsList");

        }

再次,我在List中獲取記錄但是在調試時它沒有傳遞到DocsList視圖,根據我的說法是正確的。

這里DocsList是我想要渲染的視圖,作為第二個下拉列表更改的局部視圖。 根據我的知識,雖然調試它返回到返回PartialView(“DocsList”)的點,然后再次回到ajax成功方法,最后我發現我做錯了。

早些時候我讓Json獲取數據,但在這里我從ajax調用action方法。 所以,不確定這也可能是一個問題因為我是新手。

究竟我做錯了什么?

Saroj,我看到這是一個老問題,你需要快速完成它,但如果你回到這里,我會加上我的兩分錢。 您需要刪除David和Ehsan在上面提到的return語句。 回調函數的其余部分完成了應有的功能。 在你的動作方法中,你看起來並沒有對你傳入的參數做任何事情。我假設在你將視圖傳遞給客戶端后你會想到這一點。 所以,讓我們將該視圖下載到客戶端。

我喜歡將呈現的局部視圖作為HTML字符串傳遞回客戶端。 我使用一種方法來執行此操作,該方法保存在每個控制器繼承的控制器基類中。 要使用該方法,您需要引用System.Web.Mvc和System.IO名稱空間。

該方法如下所示:

private string RenderViewToString( string viewName, object model ) {
            ViewData.Model = model;
            using ( var sw = new StringWriter() ) {
                var viewResult = ViewEngines.Engines.FindPartialView( ControllerContext, viewName );
                var viewContext = new ViewContext( ControllerContext, viewResult.View, ViewData, TempData, sw );
                viewResult.View.Render( viewContext, sw );
                viewResult.ViewEngine.ReleaseView( ControllerContext, viewResult.View );
                return sw.GetStringBuilder().ToString();
            }
        }

將模型和視圖名稱傳遞給方法,它將呈現的視圖HTML作為字符串返回,您可以將其作為ContentResult返回給客戶端。

像這樣更新你的行動方法:

 public ActionResult DocsList(int teamId, int projectId)
            {
                List<CustomerViewModel> customerViewsModels = SmartAdminHelper.GetCustomers(db1);
                if (Request.IsAjaxRequest())
                    var viewContents = RenderViewToString("DocsList", customerViewsModels);
                    return Content(viewContents);
                else
                    return View("DocsList");

            }

假設您希望渲染視圖出現的元素上有css類'.docs-detail',那么您將開始營業。 希望這可以幫助!

暫無
暫無

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

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