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

时间:2015-11-20 11:10:08

标签: jquery ajax asp.net-mvc umbraco umbraco7

我有以下情况:日历页面,用于加载过去2个月的初始销售节点。此页面有一个加载更多按钮,可以获取更多销售项目,这些项目是销售的另外两个月。

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

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>

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

@umbracoHelper.GetDictionaryValue("Calendar.ViewDetails")

有没有人有类似的问题?

Related our.umbraco forum 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('<img src="/images/ajax-loader.gif" />');

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

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

1 个答案:

答案 0 :(得分:0)

的Marko,

这是在v6但类似的问题,所以在部分我做了

var umbracoHelper = new UmbracoHelper(UmbracoContext.Current); 此致

伊斯梅尔