Реализация IDisposable для @using в бритве - PullRequest
0 голосов
/ 17 октября 2018

Это вопрос, связанный с этим постом (который также сделан мной)

Все объяснения веб-сайта, который я создаю, находятся по ссылке выше.Пожалуйста, посмотрите там.

При этом я пытаюсь использовать две модели разных типов в бритве, и мне трудно правильно обращаться с директивами, (@using @inherits и всечто), и я получаю ошибки, в которых говорится, что моя пользовательская модель не была привязана к той, которая создается CMS (UmbracoTemplateView).

В процессе размышлений о том, как обойти это, я придумал присваивать @используя директиву для IPublishedContent, таким образом, что-то вроде ниже.Таким образом, UmbracoTemplateView должен быть назначен переменной с гораздо более узкой областью, то есть я должен быть в состоянии избежать вызова этой ошибки.

@model CodeShare.Library.Models.SearchViewModel
@using CodeShare.Web.Controllers


<div class="carousel-inner">
    <div class="carousel-item active">

        <!--this part uses UmbracoTemplatePage to render the content dynamically-->


        @using (UmbracoTemplatePage)
        {

            var pageSize = 5;
        IEnumerable<IPublishedContent> newsPosts = Umbraco.AssignedContentItem.DescendantOrSelf("news").Children.Where(x => x.IsVisible() && x.DocumentTypeAlias ==     "newsPost").OrderByDescending(x => x.UpdateDate);
            var page = 1; int.TryParse(Request.QueryString["p"], out page);
            var totalPages = (int)Math.Ceiling((double)newsPosts.Count() / (double)pageSize);

            if (page > totalPages)
            {
                page = totalPages;
            }
            else if (page < 1)
            {
                page = 1;
            }

        }

        @foreach (var item in newsPosts.Skip((page - 1) * pageSize).Take(pageSize))
        {
            var imagid = item.GetPropertyValue("image");
            string imgurl = Umbraco.Media(imagid.ToString()).Url;

            <a href="@item.Url" class="media">
                <img src="@imgurl">
                <div class="media-body">
                    <h5 class="mt-0">@item.Name</h5>
                    <span>最終更新日: @item.UpdateDate.ToString("yyyy/MM/dd") </span>
                </div>
            </a>
            }


    </div>

Здесь я хочу использовать пользовательскую модель, потому что ввод будетсделанный пользователем не в backoffice.

в моем понимании, с помощью этого метода beginform, приведенного ниже, он отправляет эти HiddenFor в качестве набора параметров в метод с именем "SubmitSearchForm" в классе контроллера с именем "SurfaceController"

    @using (Ajax.BeginForm("SubmitSearchForm", "Surface", new AjaxOptions()
    {
        UpdateTargetId = "carousel",
        HttpMethod = "POST",
        InsertionMode = InsertionMode.Replace,

    }))



        @Html.HiddenFor(m => m.DocTypeAliases)
        @Html.HiddenFor(m => m.FieldPropertyAliases)
        @Html.HiddenFor(m => m.PageSize)
        @Html.HiddenFor(m => m.PagingGroupSize)
        @Html.TextBoxFor(m => m.SearchTerm)

    }
    <button id="submit-button">Search</button>


    <div class="carousel">
        @{ Html.RenderAction("RenderSearchResults", "Surface", new { Model = Model.SearchResults });}
    </div>

    }

Единственное изменение по сравнению с тем, которое я разместил на нашем.umbraco, - это директива @using при попытке рендеринга из модели, которая имеет вид "UmbracoTemplateView".

Здесь япри получении сообщения об ошибке указывается, что директива, которая может быть назначена здесь директиве @using, должна иметь тип «IDisposable», а UmbracoTemplateView - нет.

Я понимаю, что означает ошибка: UmbracoTemplateView не является нативным типомТаким образом, из .NET необходимо четко указать, когда его можно утилизировать дляу сборщика мусора.Как я могу назначить этот интерфейс?

======================================================================= *=====

добавлено 18/10/2018

Я разделил эти два представления в разных cshtml, но у меня возникла та же проблема на более высоком уровне (я должен назвать этот узел)

Поэтому, когда я отображаю страницу, она будет делегирована как "WebBase.cshtml "=>" Home.cshtml "=>" Детали, для которых требуется UmbracoTemplateView (в cshtml) "&" Детали, для которых требуется настраиваемая модель (в cshtml) ".... .... 1029 *

//I get an error when I put the following two in the same cshtml
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage
@model CodeShare.Library.Models.SearchViewModel

@using CodeShare.Web.Controllers
@using ClientDependency.Core.Mvc





@{
    Layout = "WebBase.cshtml";
}

@* the fun starts here *@

@{Html.RenderPartial("~/Views/Partials/Home/.....cshtml");}
@{Html.RenderPartial("~/Views/Partials/Home/....cshtml");}
@{Html.RenderPartial("~/Views/Partials/Home/.....cshtml");}

<!-- only this "news" part requires custom model by Mr.Paul -->
@{Html.RenderPartial("~/Views/Partials/Home/_News.cshtml");}

@{Html.RenderPartial("~/Views/Partials/Home/....cshtml");}

Как таковыев какой-то момент мне все равно понадобятся две модели разных типов в одном месте

...