【问题标题】:render umbraco field in partial view在局部视图中渲染 umbraco 字段
【发布时间】:2014-09-04 07:20:59
【问题描述】:

我使用 umbraco 7 mvc

我只想在局部视图中呈现 umbraco 字段。不知道该怎么做。 @CurrentPage 或 @Umbraco.Field 或 RenderMacro 等不起作用

我有以下局部观点

@model MvcImport.Models.ImportModel
@{
    var formSent = false;
    var success = TempData["Success"];
    if (success != null)
    {
        bool.TryParse(success.ToString(), out formSent);
    }
}

<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@if (formSent)
{

    <p>Thanks, we'll get back to you soon!</p>
}
else
{
    using (Html.BeginUmbracoForm<MvcImport.Controllers.ImportController>("ImportExcel", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <div>

            @Html.LabelFor(x => x.FileUpload)
            @Html.TextBoxFor(x => x.FileUpload, new { type = "file", name = "Files" })
            @Html.ValidationMessageFor(x => x.FileUpload)

        </div>
        <div>

            @Html.LabelFor(model => model.FileType)<br />
            @Html.DropDownListFor(model => model.FileType, Model.FileTypes)
            @Html.ValidationMessageFor(x => x.FileType)

        </div>
        <input type="submit" value="Submit" class="btn-submit" />
    }
}

我只是想替换

<p>Thanks, we'll get back to you soon!</p>

当前页面字段,例如。

@currentPage.thankYouCopy

@Umbraco.Field("thankYouCopy")

怎么做?

我在我的主视图中通过以下方式调用部分:

@Html.Partial("Import", new MvcImport.Models.ImportModel { FileTypes = fileTypes })

谢谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 partial-views asp.net-mvc-partialview umbraco7


    【解决方案1】:

    我根本没有测试过这个,但这应该会让你走上正确的道路......我可以告诉你,你想替换这个:

    @model MvcImport.Models.ImportModel
    

    有了这个:

    @inherits Umbraco.Web.Mvc.UmbracoViewPage<MvcImport.Models.ImportModel>
    

    这应该使您可以访问 UmbracoHelper 并允许您像这样访问该属性:

    @Umbraco.Field("thankYouCopy")
    

    【讨论】:

    • 是的,它有效。我尝试了 Umbraco.Web.Mvc.UmbracoViewPage 可能只是 @CurrentPage 这就是为什么它以前对我不起作用。但与 Umbraco.Field(..) 很好地配合使用谢谢@c0r3yz!
    【解决方案2】:

    我们在这里混淆了一些东西。当您尝试从 Umbraco 节点获取数据时,您有一个自定义模型。

    您正在使用自定义模型传递给您的视图。就像@c0r3yz 提到的那样,您可以更改传递给视图的模型。如果您有RenderMvcControllerSurfaceController,这可能是个好主意。

    如果您对当前的控制器(无论是什么)感到满意,您可以使用 do @Model.MyPropertyName 来显示想要的值。如果您不想要任何 umbraco 功能(例如当前节点等),这很好。

    您提到的所有字段检索选项都彼此相似。他们所做的是检索当前节点的信息。因为您使用的是自定义模型,所以在从之前讨论的 umbraco 基类继承自定义模型之前,您无法使用它们。

    • @Umbraco.Field("myfield")helper method,它可以帮助您获取和格式化正确的字段。对于初学者来说,这可能是最简单的解决方案。非常强大的功能之一是递归 = true。有关这方面的更多信息,请参阅 documentation
    • @CurrentPage.myField 返回字段的值(使用动态)。这很容易编写,但有时可能会让您陷入意外情况。
    • @Umbraco.Content.GetPropertyValue("myField") 返回字段的值。与 partial 完全相同,但使用(并返回)强类型方法/对象。如果您使用 Visual Studio,您可能会喜欢智能感知部分。
    • @Umbraco.Content.GetPropertyValue&lt;ACustomType&gt;("myField") 使用 ValuePropertyConverters 返回字段的值。如果您使用前一个并且不指定类型,则也将使用 propertyconverters。但是使用这种表示法,您可以更多地控制返回的类型。

    我添加了一些指向文档的链接,以便您查找有关不同选项的更多信息。

    【讨论】:

    • 谢谢@dampee。你肯定是对的,我在混合东西。但是我不明白为什么我不能在 UmbracoTemplatePage 中使用自定义模型?我有一个控制器,它从 excel 导入数据并希望将它们返回到列表中以显示在视图中。但是,当我同时使用 @model MyModel 和 @inherits UmbracoTemplatePage 指令时,我得到错误,我不能同时使用两者,当我只使用 @model 时,它会喊出'传入字典的模型是'System.Collections.Generic.List`1 类型[MvcImport.Models.CourseImport]',但是这个字典需要'Umbraco.Web.Models.RenderModel'类型的模型项:(
    • 只是补充一下,我不想在这个阶段为每一行创建umbraco节点,我只需要在页面或部分视图上显示数据
    • 我在这里stackoverflow.com/questions/25158951/…描述了上述问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多