簡體   English   中英

Umbraco AJAX部分視圖控制器操作調用-無法檢索Umbraco.Context

[英]Umbraco AJAX partial view controller action call - unable to retrieve the Umbraco.Context

我有以下情形: 日歷頁面,加載最近兩個月的初始銷售節點。 此頁面上有一個“ 加載更多”按鈕,可以獲取更多的銷售商品,這是另外2個月的銷售

我已將調用添加到to控制器操作中,如下所示:

public ActionResult LoadMoreSales(int months = 0)
{
        if (Request.IsAjaxRequest())
        {
            if (Request.QueryString["department"] == null)
            {
                return PartialView("Calendar/_Sales", GetSales(0, months));
            }
            else
            {
                int depId = 0;
                Int32.TryParse(Request.QueryString["department"], out depId);

                return PartialView("Calendar/_Sales", GetSales(depId, months));
            }
        }
        else
        {
            return PartialView("Calendar/_Sales");
        }
}

GetSale檢索訪問日歷頁面,點擊加載更多的按鈕時,當使用SaleViewModel_Sales部分名單。 通過此方法,將進行AJAX調用並檢索列表。

_Sales部分繼承以下內容:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<IEnumerable<SaleViewModel>>

點擊按鈕jQuery事件:

$('.js-reload-details').on('click', function (evt) {
    $('div#loading').html('<img src="/images/ajax-loader.gif" />');
    evt.preventDefault();
    evt.stopPropagation();

    var $detailsDiv = $('#detailsDiv'),
        url = $(this).data('url');

    $.get(url, function (data) {
        $detailsDiv.replaceWith(data);
    });

    $('div#loading').empty();
});

按鈕單擊的實現是這樣的:

<a id="loadMore" class="js-reload-details cta" data-url="@Url.Action("LoadMoreSales", "Calendar", new { months = -2})" href="javascript:;">@Umbraco.GetDictionaryValue("Calendar.LoadMore")</a>

銷售商品正在加載中,但是我無法訪問UmbracoHelper,並且當我在銷售頁面字段列表中添加宏時,由於沒有UmbracoContext引用,因此調用中斷了。 另外,以下字典調用不起作用:

@umbracoHelper.GetDictionaryValue("Calendar.ViewDetails")

有人遇到過類似的問題嗎?

相關our.umbraco論壇帖子

編輯

我還嘗試了以下提交表單實現,但是結果是相同的:

AJAX形式:

@using (Ajax.BeginForm("LoadMoreSales", 
                       "Calendar",  
                       new {months = -2}, 
                       new AjaxOption { HttpMethod = "GET", 
                                        OnSuccess = "loadMore(data, status, xhr)" }))

jQuery實現:

function loadMore(data, status, xhr) {
        $('div#loading').html('<img src="/images/ajax-loader.gif" />');

        if (data != '') {
            $("#saleList").append(data);
        }

        $('div#loading').empty();
}

編輯 :添加了固定的實現。

我可以通過在返回PartialView之前設置CultureInfo來解決此問題,如下所示: System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture)

動作方法如下所示:

public ActionResult LoadMoreSales(int months = 0, string culture = "")
{
        // Set the 'CultureInfo' to perserve 'UmbracoContext' when performing an AJAX call
        System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

        if (Request.IsAjaxRequest())
        {
            if (Request.QueryString["department"] == null)
            {
                return PartialView("Calendar/_Sales", GetSales(0, months));
            }
            else
            {
                int depId = 0;
                Int32.TryParse(Request.QueryString["department"], out depId);

                return PartialView("Calendar/_Sales", GetSales(depId, months));
            }
        }
        else
        {
            return PartialView("Calendar/_Sales");
        }
}

我在.cshtml添加了隱藏的cultureInfo標簽:

<div id="cultureInfo" hidden>@System.Threading.Thread.CurrentThread.CurrentCulture</div>

jQuery也進行了修改,以讀取隱藏值並將其傳遞給控制器​​操作,如下所示:

        var cultureInfo = $('#cultureInfo').html();

        $.get("/umbraco/surface/Calendar/LoadMoreSales?months=" + months + "&culture=" + cultureInfo, function (data) {
            if (data != '') {
                $("#saleList").append(data);
            }
            else {
                months = -1;
                $("#saleList").append('No more news to display');
            }

            _inCallback = false;
            $('div#loading').empty();
        });

無需更改.cshtml文件,字典值已正確加載。

馬爾科,

這是在v6中,但類似的問題,所以在部分我

var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 問候

伊斯梅爾

暫無
暫無

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

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