Asp.net mvc 4 重用动态对象(CurrentPage)并将其传递给局部视图MVC Umbraco

Asp.net mvc 4 重用动态对象(CurrentPage)并将其传递给局部视图MVC Umbraco,asp.net-mvc-4,view,umbraco,partial-views,reusability,Asp.net Mvc 4,View,Umbraco,Partial Views,Reusability,我对MVC有些陌生(6个月),我喜欢尽可能少地使用代码,尤其是在涉及可重用代码时,等等。我使用的是Umbraco v7.2,我有(3)个选项卡,它们都使用相同的数据类型(自定义网格v7) 网格有(4)个字段。基本上,我的页面上的所有(3)部分都是相同的,标题和被调用的对象除外(动态对象是其中包含选项卡属性的对象,正如我前面所述,它们是相同的) 如何调用局部视图并重用相同的代码?“foreach”是我需要调用这个局部视图的地方,正如您所看到的,它使用相同的代码,但被迭代的对象除外 “Current

我对MVC有些陌生(6个月),我喜欢尽可能少地使用代码,尤其是在涉及可重用代码时,等等。我使用的是Umbraco v7.2,我有(3)个选项卡,它们都使用相同的数据类型(自定义网格v7)

网格有(4)个字段。基本上,我的页面上的所有(3)部分都是相同的,标题和被调用的对象除外(动态对象是其中包含选项卡属性的对象,正如我前面所述,它们是相同的)

如何调用局部视图并重用相同的代码?“foreach”是我需要调用这个局部视图的地方,正如您所看到的,它使用相同的代码,但被迭代的对象除外

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

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

@foreach(CurrentPage.XXXX中的varxxxx)这并不太难。在调用partial时,只需使用partial的名称。这是不带扩展名的分部文件的文件名。当前的“模型”也将在您的partial中可用,而无需将某些内容传递给partial

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

@Html.Partial(“不带扩展名的部分名称”)
如果继承自,则可以像在视图中一样使用模型

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@foreach (var contact in CurrentPage.Children)
{
    <section class="clearfix">
        <div class="col-md-6 col-sm-6">
            <ul>
                <li>@contact.contactName</li>
                <li>@contact.contactTitle</li>
            </ul>
         </div>
     </section>
 }        
@继承Umbraco.Web.Mvc.UmbracoTemplatePage
@foreach(CurrentPage.Children中的var联系人)
{
  • @contact.contactName
  • @contact.contactTitle
}
曾经做过类似的事情

请这样称呼您的部分用户:

@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>
            }
@模型动态
@foreach(模型中的var触点)
{
  • @contact.contactName
  • @contact.contactTitle
}
谢谢莫滕OC。竖起大拇指。我使用NestedContent并调用Partial view来呈现IPPublishedContent,但我也想访问CurrentPage

对对象的简单强制转换首先起作用。为了详细说明,这里有一些额外的代码,以防有人需要相同的代码-

    Html.RenderPartial("~/Views/Partials/MyPartial.cshtml", 
                        item, //for me this is an IPublishedContent
                        new ViewDataDictionary { { "CurrentPage", (object)CurrentPage } });
然后在我的部分中,为了简洁而缩短-

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

<p>@CurrentPage.Name</p>
@继承Umbraco.Web.Mvc.UmbracoViewPage
@{
动态CurrentPage=ViewBag.CurrentPage;
}
@当前页面名称

因此,我的模型是ippublishedcontent(因为我迭代嵌套内容)

然后在ViewBag中,您将有一个对CurrentPage的引用。我把它命名为CurrentPage,就是为了继续使用CurrentPage,就像我们在Umbraco中通常使用的那样


Cheers Morten H5YR

由于没有显示数据,这没有达到预期结果。我已经更新了我的问题(编辑)和更多信息。这正是我所需要的!谢谢
@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>
            }
    Html.RenderPartial("~/Views/Partials/MyPartial.cshtml", 
                        item, //for me this is an IPublishedContent
                        new ViewDataDictionary { { "CurrentPage", (object)CurrentPage } });
@inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent>
@{
    dynamic CurrentPage = ViewBag.CurrentPage;
}

<p>@CurrentPage.Name</p>