我使用了umbraco 7 mvc
我只是想在局部视图中渲染umbraco字段。不知道该怎么做。@CurrentPage或@Umbraco。字段或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 })
谢谢
我还没有测试过这个,但这应该会让你走上正确的道路…我只能说,你想替换这个:
@model MvcImport.Models.ImportModel
With this:
@inherits Umbraco.Web.Mvc.UmbracoViewPage<MvcImport.Models.ImportModel>
这应该允许你访问UmbracoHelper,并允许你像这样访问属性:
@Umbraco.Field("thankYouCopy")
我们在这里混淆了一些东西。当你试图从Umbraco节点获取数据时,你有一个自定义模型。
您正在使用自定义模型来传递给视图。就像@c0r3yz提到的那样,您可以更改传递给视图的模型。如果你有一个RenderMvcController或一个SurfaceController,这可能是一个好主意。
如果您对当前控制器(无论这是什么)感到满意,您可以使用do @Model.MyPropertyName
来显示所需的值。如果你不想要任何umbraco功能(如当前节点等),这是完全可以的。
您提到的所有字段检索选项都彼此相似。它们所做的是检索当前Node的信息。因为你正在使用一个自定义模型,你不能使用它们,直到你从一个unbraco基类继承你的自定义模型,就像前面讨论的。
-
@Umbraco.Field("myfield")
是一个辅助方法,它可以帮助您获取和格式化正确的字段。对于初学者来说,这可能是最简单的解决方案。其中一个非常强大的特性是递归= true。关于这方面的更多信息,请参阅文档 -
@CurrentPage.myField
返回字段的值(使用动态)。这很容易写,但有时可能会让您遇到意想不到的情况。 -
@Umbraco.Content.GetPropertyValue("myField")
返回该字段的值。与partial完全相同,但使用(并返回)强类型方法/对象。如果你使用Visual Studio,你可能会喜欢它的智能感知部分。 -
@Umbraco.Content.GetPropertyValue<ACustomType>("myField")
使用ValuePropertyConverters返回字段的值。如果您使用前一种而不指定类型,则也将使用propertyconverters。但是有了这个符号,你可以控制更多的返回类型。
我在文档中添加了一些链接,以便您可以查找有关不同选项的更多信息。