визуализировать поле умбрако в частичном представлении

Я использую умбрако 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

or

@Umbraco.Field("thankYouCopy")

Как это сделать?

Я вызываю частичное в моем основном представлении следующим образом:

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

Спасибо


person nickornotto    schedule 14.07.2014    source источник


Ответы (2)


Я вообще не проверял это, но это должно направить вас по правильному пути... Насколько я могу судить, вы хотите заменить это:

@model MvcImport.Models.ImportModel

С этим:

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

Это должно дать вам доступ к UmbracoHelper и позволить вам получить доступ к свойству следующим образом:

@Umbraco.Field("thankYouCopy")
person c0r3yz    schedule 14.07.2014
comment
даааа работает. Я попробовал Umbraco.Web.Mvc.UmbracoViewPage‹MvcImport.Models.ImportModel›, возможно, с @CurrentPage, только поэтому у меня это не сработало раньше. Но прекрасно работает с Umbraco.Field(..) Спасибо @c0r3yz! - person nickornotto; 15.07.2014

Мы несколько вещей смешиваются здесь. У вас есть пользовательская модель, когда вы пытаетесь получить данные от узлов Umbraco.

Вы используете пользовательскую модель для перехода к вашему представлению. Как упоминает @c0r3yz, вы можете изменить модель, передаваемую в представление. Если у вас есть RenderMvcController или SurfaceController это может быть хорошей идеей.

Если вы довольны своим текущим контроллером (каким бы он ни был), вы можете использовать do @Model.MyPropertyName для отображения желаемого значения. Если вам не нужна какая-либо функциональность umbraco (например, текущий узел и т. д.), это прекрасно.

Все варианты поиска полей, которые вы упомянули, похожи друг на друга. Что они делают, так это извлекают информацию о текущем узле. Поскольку вы используете пользовательскую модель, вы не можете использовать их, пока не унаследуете свою пользовательскую модель от базового класса umbraco, как обсуждалось ранее.

  • @Umbraco.Field("myfield") – это вспомогательный метод, который поможет вам получить и отформатировать правильный поле. Это, пожалуй, самое простое решение для начинающих. Одной из очень мощных функций является recursive = true. Дополнительную информацию см. в документации.
  • @CurrentPage.myField вернуть значение поля (используя динамику). Это легко написать, но иногда вы можете попасть в неожиданные ситуации.
  • @Umbraco.Content.GetPropertyValue("myField") возвращает значение поля. Делает то же самое, что и partial, но использует (и возвращает) строго типизированные методы/объекты. Если вы используете Visual Studio, вам, вероятно, понравится часть IntelliSense.
  • @Umbraco.Content.GetPropertyValue<ACustomType>("myField") возвращает значение поля, используя ValuePropertyConverters. . Если вы используете предыдущее и не указываете тип, также будут использоваться преобразователи свойств. Но с этой нотацией вы можете немного больше контролировать, какой тип возвращается.

Я добавил несколько ссылок на документацию, чтобы вы могли найти дополнительную информацию о различных параметрах.

person dampee    schedule 15.07.2014
comment
Спасибо @dampee. Вы уверены, что я смешиваю вещи. Однако я не могу понять, почему я не могу использовать пользовательскую модель в UmbracoTemplatePage? У меня есть контроллер, который импортирует данные из Excel и хочет вернуть их в список для отображения в представлении. Однако, когда я использую обе директивы @model MyModel и @inherits UmbracoTemplatePage, я получаю сообщение об ошибке, я не могу использовать обе, и когда я использую только @model, тогда он кричит: «Модель, переданная в словарь, имеет тип «System.Collections.Generic.List`1». [MvcImport.Models.CourseImport]», но для этого словаря требуется элемент модели типа «Umbraco.Web.Models.RenderModel» :( - person nickornotto; 05.08.2014
comment
Просто добавлю, что на данном этапе я не хочу создавать узлы umbraco каждой строки, мне просто нужно отображать данные на странице или в частичном представлении. - person nickornotto; 05.08.2014
comment
Я описал вышеописанную проблему здесь stackoverflow.com/questions/25158951/. - person nickornotto; 08.08.2014