【问题标题】:How to load a partial view into a container in _Layout.cshtml如何将部分视图加载到 _Layout.cshtml 中的容器中
【发布时间】:2015-07-02 02:46:54
【问题描述】:

您好,请告诉我如何将 PartialView 加载到我在 _Layout.cshtml 中准备的 div 容器中(与链接本身完全分开)。我希望通过单击以下操作链接将其加载到容器中:

<a href="@Url.Action("RenderColorbox", "ContactPartial", new { path = "_ContactPartial" })" class="colorboxLink"><span>ContactUs</span></a>

我想在没有 javascript 的情况下执行此操作,因为我需要在我的控制器中创建一个模型并将其传递给 PartialView,而且我认为不可能使用 javascript 将强类型模型传递给视图。

如果我愿意,我可以使用:

$('.colorboxLink').click(function () {
     $('.colorbox_container').load(this.href);
});

但是正如我所提到的,这并没有给我创建强类型模型并将其传递给局部视图的机会...重要的是我可以创建模型并将其传递给视图,因为当我收到空引用异常时我在局部视图中尝试了类似 foreach(var item in Model.ItemList) 的方法。

这是我的控制器的样子:

    public virtual ActionResult RenderColorbox(string path)
    {
        return PartialView(path, null);
    }

但是,目前,单击操作链接只会将 PartialView 呈现在一个新的空白页面中,而不是在我设置的容器中。

感谢大家的帮助。

编辑:要加载颜色框,我建议使用以下内容:

    $('.colorboxLink').click(function () {
    $('.colorbox_container').load(this.href, function () {
        var colorboxOptions = {
            inline: true,
            scrolling: false,
            opacity: ".9",
            fixed: true,
            onLoad: function () {
                $('#cboxContent').css({
                    "background": "white"
                });
                $('#cboxLoadedContent').css({
                    "margin-bottom": "28px",
                    "height": "558px"
                });
            }
        }
        $('#contactColorbox').colorbox(colorboxOptions);


    });

但仍然在没有颜色框的情况下加载,而是作为弹出模式。

【问题讨论】:

    标签: asp.net view razor partial


    【解决方案1】:

    但正如我所提到的,这并没有给我创造和传递的机会 局部视图的强类型模型。

    它给了你这样的机会。您正在向 ContactPartial 控制器上的 RenderColorbox 操作发送 AJAX 请求。在此操作中,您可以准备任何复杂的视图模型并将其发送到部分:

    public ActionResult RenderColorbox(string path)
    {
        SomeComplexModel model = ...
        return PartialView(path, model);
    }
    

    还要确保通过从点击处理程序返回 false 来取消链接的默认操作:

    $(function() {
        $('.colorboxLink').click(function () {
            $('.colorbox_container').load(this.href);
            return false;
        });
    });
    

    如果你不这样做,当你点击链接时,你的 AJAX 调用几乎没有机会在浏览器重定向到目标页面之前执行。

    【讨论】:

    • 好吧,如果我像上面展示的那样使用 javascript load(),那么我会在 actionlink 上设置 onclick="false",不是吗?因为否则它只会将部分视图加载到一个空白的新页面中。在那种情况下,如果 onclick="false" 不会调用 RenderColorbox() 对吗?
    • @user1267778,当您已经在 javascript 中订阅了锚点后,为什么还要向锚点添加 onclick 属性?同样正确的是onclick="return false;",而不是onclick="false"。但不要这样做。不要混合标记和 javascript。
    • 我明白了。谢谢您的帮助。由于它已经成为主题,您还可以帮助我解决颜色框未加载的问题。换句话说,单击操作链接会渲染视图,但只是作为弹出窗口,而不是作为颜色框。我的局部视图中有以下脚本,我认为它会在颜色框中呈现局部视图,但它不起作用:(查看脚本的帖子)
    • @user1267778,您的局部视图中不应包含任何脚本。一旦 AJAX 回调成功,您应该调用它:$('.colorbox_container').load(this.href, function() { /** put the code to load the colorbox here **/ })
    • 顺便说一句,很抱歉不小心编辑了你的帖子,我打算编辑我​​自己的
    猜你喜欢
    • 1970-01-01
    • 2014-12-02
    • 2016-07-07
    • 2019-11-16
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多