如何在_Layout.cshtml中将局部视图加载到容器中

时间:2012-03-15 07:28:58

标签: asp.net view razor partial

您好,有人可以告诉我如何将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(Model.ItemList中的var项)的内容。

这是我的控制器的样子:

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


    });

但是仍然加载没有colorbox,而是作为弹出模式加载。

1 个答案:

答案 0 :(得分:0)

  

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

它给你这样的机会。您正在向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调用几乎没有机会在浏览器重定向到目标页面之前执行。