【问题标题】:Reuse and pass dynamic object (CurrentPage) to Partial View MVC Umbraco重用并将动态对象 (CurrentPage) 传递给 Partial View MVC Umbraco
【发布时间】:2015-03-15 16:18:06
【问题描述】:

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

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

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

“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. 领导团队
  2. 贷方团队
  3. avisoryBoard(省略了 简洁)

如何将 (CurrentPage.JSONobjectHere) 传递给局部视图,对所有三个部分仅使用一个局部视图

【问题讨论】:

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


    【解决方案1】:

    感谢 Morten OC。竖起大拇指。我正在使用 NestedContent 并调用 Partial 视图来呈现 IPublishedContent,但也想要访问 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>
    

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

    然后在 ViewBag 中您将获得对 CurrentPage 的引用。我将其命名为 CurrentPage,这样我就可以继续使用 CurrentPage,就像我们在 Umbraco 中通常所做的那样。

    干杯莫腾 H5YR

    【讨论】:

      【解决方案2】:

      曾经做过类似的事情。

      像这样调用你的局部:

      @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>
                  }
      

      【讨论】:

      • 正是我需要的!谢谢!
      【解决方案3】:

      这并不难。在对部分的调用中,只需使用部分的名称。这是不带扩展名的部分文件名。当前的“模型”也将在您的部分中可用,而无需您将某些内容传递给部分。

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

      如果您从UmbracoTemplatePage or the UmbracoViewPage 继承,那么您可以像在视图本身中一样使用模型。

      @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>
       }        
      

      【讨论】:

      • 这没有达到预期的结果,因为没有显示任何数据。我已经更新了我的问题(编辑),包含更多信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多