我有以下情况: 日历 页面,加载最近两个月的初始销售节点。这个页面有一个 加载更多 的按钮,取更多的 销售 是额外的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(); }
编辑 :添加了固定的实现。
我能够通过CultureInfo在返回之前设置来解决此问题,PartialView如下所示:System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture)
CultureInfo
PartialView
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"); } }
我在中添加了隐藏cultureInfo标签.cshtml:
cultureInfo
.cshtml
<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文件,字典值已正确加载。