.Net Core Razor Pages - частичное представление с несколькими объектами

Я новичок в страницах .Net Core, EF Core и Razor.

У меня есть форма, которая использует сообщения на бритвенной странице. Модель страницы имеет три связанных свойства, два из которых являются моделями EF (я использую наследование только для привязки безопасных свойств), а одно - просто строка:

 [BindProperty]
 public Models.BaseEvent _Event { get; set; }

 [BindProperty]
 [Display(Name = "Venue Search")]
 public string _VenueSearch { get; set; }

 [BindProperty]
 public Models.BaseVenue _Venue { get; set; }

Затем у меня есть форма, используемая для создания мероприятия. Добавляя информацию о мероприятии, они могут либо выбрать существующее место проведения, используя поиск места проведения, либо добавить новое. _VenueSearch связан только с автоматическим повторным заполнением формы в случае ошибки. Я использую jquery для автозаполнения поля.

Однако я пытаюсь поместить форму в партиал, но понятия не имею, как передать _Event, _VenueSearch & _Venue?

<form method="post">
            <input id="venueid" type="hidden" asp-for="_Venue.VenueID" />
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="_Event.Name" class="control-label"></label>
                <input asp-for="_Event.Name" class="form-control" />
                <span asp-validation-for="_Event.Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Event.StartDateTime" class="control-label"></label>
                <input asp-for="_Event.StartDateTime" class="form-control" />
                <span asp-validation-for="_Event.StartDateTime" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Event.EndDateTime" class="control-label"></label>
                <input asp-for="_Event.EndDateTime" class="form-control" />
                <span asp-validation-for="_Event.EndDateTime" class="text-danger"></span>
            </div>
            <hr />
            <div id="search-container" class="form-group">
                <label asp-for="_VenueSearch" class="control-label"></label>
                <input id="venue" asp-for="_VenueSearch" class="form-control" />
                <span asp-validation-for="_VenueSearch" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.Name" class="control-label">Venue Name</label>
                <input id="venue-name" asp-for="_Venue.Name" class="form-control" />
                <span asp-validation-for="_Venue.Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.Address" class="control-label">Venue Address</label>
                <input id="venue-address" asp-for="_Venue.Address" class="form-control" />
                <span asp-validation-for="_Venue.Address" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.City" class="control-label">Venue City</label>
                <input id="venue-city" asp-for="_Venue.City" class="form-control" />
                <span asp-validation-for="_Venue.City" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Venue.PostCode" class="control-label">Venue Postcode</label>
                <input id="venue-postcode" asp-for="_Venue.PostCode" class="form-control" />
                <span asp-validation-for="_Venue.PostCode" class="text-danger"></span>
            </div>
            <hr />
            <div class="form-group">
                <label asp-for="_Event.Description" class="control-label"></label>
                <textarea asp-for="_Event.Description" class="form-control"></textarea>
                <span asp-validation-for="_Event.Description" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="_Event.AgeRestriction" class="control-label"></label>
                <input asp-for="_Event.AgeRestriction" class="form-control" />
                <span asp-validation-for="_Event.AgeRestriction" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create Event" class="btn btn-primary" />
            </div>
        </form>

Как бы я поместил это в партиал, чтобы у меня по-прежнему был доступ к двум моделям и строке (_Event, _Venue & _VenueSearch. Я не включил код автозаполнения javascript, поскольку он не имеет отношения к этому сообщению.

Я хочу использовать партиал, так как обе мои страницы создания / редактирования будут использовать одну и ту же форму, поэтому я не вижу смысла дублировать.

Заранее благодарю за любую помощь

Мэтт


person Matt Jones    schedule 22.01.2020    source источник


Ответы (1)


Вы можете создать модель представления и включать в себя объекты, которые при запросе из базы данных при загрузке частичного представления напрямую передают модель представления в частичное представление:

@await Html.PartialAsync("viewName", model:Model.YourModel)
person Nan Yu    schedule 23.01.2020
comment
Спасибо за ответ. Это именно то, что я думал, что мне придется сделать. Но создание модели представления только для того, чтобы я мог передавать объекты в частичное представление, мне кажется безумием, жаль, что частичные элементы не могут иметь доступа к тем же данным, что и ваше стандартное представление страницы. - person Matt Jones; 23.01.2020
comment
Не совсем, вы можете загрузить частичное представление из кодов cs: mikesdotnetting.com/article/325/. Чтобы вам не нужно было создавать модель представления, исправляйте данные непосредственно из модели EF и, наконец, передавайте данные в частичное представление. - person Nan Yu; 24.01.2020