重用并将动态对象(CurrentPage)传递给Partial View MVC Umbraco

时间:2015-01-16 23:37:42

标签: asp.net-mvc-4 view umbraco partial-views reusability

我有点(6个月)刚接触MVC,我喜欢尽可能少地使用代码,特别是在可重用代码等方面。我正在使用Umbraco v7.2,我有( 3)选项卡,所有选项使用相同的数据类型(自定义网格v7)。

网格有(4)个字段。基本上我页面上的所有(3)部分都是相同的w /标题和被调用对象的异常(动态对象是tab中的属性,如前所述,它们是相同的)

如何调用部分视图并重用相同的代码? “foreach”是我需要调用这个局部视图的地方,因为你可以看到它使用相同的精确代码w /被迭代的对象除外。

“CurrentPage.XXXX”是我需要传递的,我可以拥有相同的迭代器

@foreach(var XXXX in CurrentPage.XXXX)   <---- partial view

查看:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@{
    Layout = "Master.cshtml";
}

    <article class="accordion-wrapper">
        <div class="accordion-container accordion-contact">
            <a href="javascript:void(0);" class="mont-bold accordion">Leadership Team</a>
            @foreach (var leadership in CurrentPage.leadershipTeam)
            {
                <section class="clearfix">
                    <div class="col-md-6 col-sm-6">
                        <ul>
                            <li>@leadership.contactName</li>
                            <li>@leadership.contactTitle</li>
                        </ul>
                    </div>
                    <aside class="col-md-6 col-sm-6">
                        <ul>
                            <li>@leadership.contactPhone</li>
                            <li>
                                <a href="mailto:@leadership.contactEmail">@leadership.contactEmail</a>
                            </li>
                        </ul>
                    </aside>
                </section>
            }
        </div>
    </article>
    <article class="accordion-wrapper">
        <div class="accordion-container accordion-contact">
            <a href="javascript:void(0);" class="mont-bold accordion">The Lenders One Team</a>
            @foreach (var lenders in CurrentPage.lendersTeam)
            {
                <section class="clearfix">
                    <div class="col-md-6 col-sm-6">
                        <ul>
                            <li>@lenders.contactName</li>
                            <li>@lenders.contactTitle</li>
                        </ul>
                    </div>
                    <aside class="col-md-6 col-sm-6">
                        <ul>
                            <li>@lenders.contactPhone</li>
                            <li>
                                <a href="mailto:@lenders.contactEmail">@lenders.contactEmail</a>
                            </li>
                        </ul>
                    </aside>
                </section>
            }
        </div>
    </article>

    .... another one here but omitted for brevity

然后把它变成:

    <article class="accordion-wrapper">
        <div class="accordion-container accordion-contact">
            <a href="javascript:void(0);" class="mont-bold accordion">Leadership Team</a>
            @Html.Partial( ?????? )
        </div>
    </article>
    <article class="accordion-wrapper">
        <div class="accordion-container accordion-contact">
            <a href="javascript:void(0);" class="mont-bold accordion">The Lenders One Team</a>
            @Html.Partial( ?????? )
        </div>
    </article>

部分???

            @foreach (var contact in ??????)
            {
                <section class="clearfix">
                    <div class="col-md-6 col-sm-6">
                        <ul>
                            <li>@contact.contactName</li>
                            <li>@contact.contactTitle</li>
                        </ul>
                    </div>
                    <aside class="col-md-6 col-sm-6">
                        <ul>
                            <li>@contact.contactPhone</li>
                            <li>
                                <a href="mailto:@contact.contactEmail">@contact.contactEmail</a>
                            </li>
                        </ul>
                    </aside>
                </section>
            }

欣赏它;)


修改

为了澄清,我之前在Umbraco中使用了部分视图。上面的问题是我有(3)个不同的对象(grids in u7)。网格在Umbraco中的工作原理是您创建一种新的数据类型,并在该数据类型(文本框,媒体选择器等)中定义某些字段。然后,您可以向文档类型添加属性(在本例中,我使用了我创建的自定义网格)。创建页面后,基于文档类型,继承属性。

对于联系页面,我需要(3)单独的网格。但是每个网格中都有不同的数据。因此,这是(3)不同的JSON对象,我迭代。在上面的代码中,(3)JSON对象是:

  1. leadershipTeam
  2. lendersTeam
  3. avisoryBoard(省略的     简洁)
  4. 如何将(CurrentPage.JSONobjectHere)传递给局部视图,仅使用所有三个部分的一个局部视图

2 个答案:

答案 0 :(得分:4)

曾做过类似的事情。

像这样打电话给你的部分:

@Html.Partial("YourPartialName", (object)CurrentPage.lendersTeam)

然后在部分中使用动态作为模型:

@model dynamic
@foreach (var contact in Model)
            {
                <section class="clearfix">
                    <div class="col-md-6 col-sm-6">
                        <ul>
                            <li>@contact.contactName</li>
                            <li>@contact.contactTitle</li>
                        </ul>
                    </div>
                    <aside class="col-md-6 col-sm-6">
                        <ul>
                            <li>@contact.contactPhone</li>
                            <li>
                                <a href="mailto:@contact.contactEmail">@contact.contactEmail</a>
                            </li>
                        </ul>
                    </aside>
                </section>
            }

答案 1 :(得分:0)

谢谢Morten OC。竖起大拇指。我使用NestedContent并调用Partial视图来呈现IPublishedContent,但也想访问CurrentPage。

简单投射到对象首先工作。详细说明,这里有一些额外的代码,以防有人需要相同的东西 -

    Html.RenderPartial("~/Views/Partials/MyPartial.cshtml", 
                        item, //for me this is an IPublishedContent
                        new ViewDataDictionary { { "CurrentPage", (object)CurrentPage } });

然后在我的Partial中,为了简洁而缩短 -

@inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent>
@{
    dynamic CurrentPage = ViewBag.CurrentPage;
}

<p>@CurrentPage.Name</p>

所以我的模型是IPublishedContent(因为我正在迭代嵌套内容)

然后在ViewBag中,您将引用CurrentPage。我将其命名为CurrentPage,因此我可以像在Umbraco中一样继续使用CurrentPage。

干杯莫滕H5YR