Umbraco AJAX局部视图控制器动作调用 – 无法检索Umbraco.Context

我有以下情形:加载过去2个月的初始销售节点的日历页面。 此页面有一个“ 加载更多”按钮,可以获取更多销售额为2个月的Sale项目。

我已将调用添加到控制器操作,如下所示:

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部分inheritance以下内容:

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

点击按钮jQuery事件:

 $('.js-reload-details').on('click', function (evt) { $('div#loading').html(''); evt.preventDefault(); evt.stopPropagation(); var $detailsDiv = $('#detailsDiv'), url = $(this).data('url'); $.get(url, function (data) { $detailsDiv.replaceWith(data); }); $('div#loading').empty(); }); 

按钮单击实现如下:

 @Umbraco.GetDictionaryValue("Calendar.LoadMore") 

正在加载Sale项目,但我无法访问UmbracoHelper ,当我将宏添加到销售页面字段列表时,由于没有UmbracoContext引用,因此调用中断。 此外,以下字典调用不起作用:

@umbracoHelper.GetDictionaryValue("Calendar.ViewDetails")

有没有人有类似的问题?

相关的our.umbraco论坛post

编辑

我也尝试了以下提交表单实现,但结果是一样的:

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(''); 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标记:

  

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); 问候

伊斯梅尔