当前位置: 首页 > 面试题库 >

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

戚甫
2023-03-14
问题内容

我有以下情况: 日历 页面,加载最近两个月的初始销售节点。这个页面有一个 加载更多 的按钮,取更多的 销售 是额外的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)

动作方法如下:

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

<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文件,字典值已正确加载。



 类似资料:
  • 我有一个mvc视图和一个局部视图。控制器中有一个ActionResult方法,它将返回一个PartialView。所以,我需要将ViewBag数据从ActionResult方法传递到部分视图。 这是我的控制器 在Index.cshtml视图中 Step1.cshtml局部视图 但是这是行不通的。那么,从viewpack获取数据的正确方法是什么?我想我遵循了错误的方法。请指导我。

  • 假设我有一个名为的扩展,my_extension一个名为的插件。 然后,我的控制器中有一个名为的函数。 如何通过通常的http GET请求从外部调用此?

  • 我正在尝试将子视图控制器添加到父视图控制器,并让父视图控制器通知子视图控制器旋转事件。但是,旋转消息不会转发到子视图控制器(这是默认行为)。为什么没有发生这种默认行为? 环境:iOS 7、XCode 5、OSX 10.9 我正在按照Apple文档中的说明实现一个自定义容器视图控制器:“创建自定义容器视图控制器”。我试图建立一个简单的父子关系来转发旋转事件。总体层次结构与此处重新绘制的文档图14-1

  • 以下的一段代码相当于定义一个ParameterizableViewController视图控制器的快捷方式,该控制器会立即将一个请求转发(forwards)给一个视图。请确保仅在以下情景下才使用这个类:当控制器除了将视图渲染到响应中外不需要执行任何逻辑时。 以下是一个例子,展示了如何在MVC Java编程配置方式下将所有"/"请求直接转发给名字为"home"的视图: @Configuration

  • 问题内容: 我知道这是一个非常基本的问题。 但是您能否告诉我 所有可用的选项 , 从Razor View 调用“ 控制操作方法” [通常是任何服务器端例程] , 以及哪种 情况最适合 用于哪种 情况 。 谢谢。 问题答案: 方法1: 使用jQuery Ajax Get调用( 部分页面更新 )。 适用于需要从数据库检索jSon数据的情况。 管制员的行动方法 jQuery GET 人类 方法2: 使用

  • 我需要修改我的代码,使它成为一个模型-视图-控制器。因为我是一个完全的编程新手,如果我诚实的话,我会头疼。任何帮助如何做到这一点将不胜感激。 *在一个牧场上有200只忙碌的绵羊。这群羊由95只白羊、60只黑羊和45只白黑羊组成。牧羊人现在想把它们分开,这样相应的羊毛就可以按颜色剪了。帮他写一个小脚本,这样他就可以更好地点他的羊了。请使用变量、数组、数学运算符和函数实现前三点。提示:为了更好地概述,