4

我使用 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 })

谢谢

4

2 回答 2

4

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

@model MvcImport.Models.ImportModel

有了这个:

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

这应该使您可以访问 UmbracoHelper 并允许您访问该属性,如下所示:

@Umbraco.Field("thankYouCopy")
于 2014-07-14T21:28:56.963 回答
4

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

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

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

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

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

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

于 2014-07-15T08:17:55.283 回答