Нужна ли модель представления для частичного представления для отображения пользовательского объекта в ASP.Net Основная страница Бритвы?

#c# #viewmodel #razor-pages #partial-views #asp.net-core-3.1

Вопрос:

Я создаю свой 1-й ASP.Net Основное (3.1) Приложение на странице Razor и у вас есть вопрос о передаче пользовательского объекта в частичное представление.

При разработке ASP.Net Приложения MVC в прошлом я бы использовал ViewModels для передачи пользовательских объектов в представления Razor и частичные представления. Однако, насколько я понимаю, модель страницы в приложении .Net Core Razor Pages действует как модель представления, поэтому не должно быть необходимости использовать класс ViewModel.

Я применял это во всем своем приложении, однако теперь мне нужно отправить пользовательский объект в частичное представление со страницы Razor. Я закончил тем, что использовал класс ViewModel для этого, поскольку я не знаю другого способа сделать это (передача нескольких элементов данных), однако это кажется беспорядочным, и я хотел бы знать, как другие разработчики подошли к тому же.

Является ли этот подход правильным (он действительно работает), или есть другой, более элегантный метод?

Модель страницы бритвы

 //Need to pass the object and select lists to Partial View, but unable to do so because
//They are separate items
[BindProperty]
public Person myPerson { get; set; }
public SelectList selectListOne { get; set; }
public SelectList selectListTwo { get; set; }

//Instead have created a custom ViewModel which I will populate and pass to Partial View
[BindProperty]
public viewModel myViewModel { get; set; }

public IActionResult OnGet()
{
    myViewModel= new viewModel 
    {
       vmPerson = new Person 
       {
           Name = '',
           Date = DateTime.Now
       },
       vmselectListOne = new SelectList(Enumerable.Range(0, 1000).ToList()),
       vmselectListTwo = new SelectList(Enumerable.Range(0, 1000).ToList())
    };

    return Page();
}
 

Страница Бритвы Cshtml

 @page "{Id:int}"
@model MyApp.Web.CreateModel

<partial name="_myPartial" model="Model.myViewModel" />
 

Частичный Вид

 @using MyApp.Web.Models
@model viewModel 

//Populate fields of object and drop down lists etc.
 

Любой совет приветствуется.

Комментарии:

1. Есть ли какая-либо причина, по которой вы не используете .NET 5?

2. @Полу нужна долгосрочная поддержка. Я не думаю, что .NET 5 или .NET Core 3.1 имеют значение для этого вопроса, хотя?

3. Как бы то ни было, вот как я это делаю.

4. @Майк Спасибо, вашего мнения мне достаточно, чтобы продолжить упомянутый подход.

5. @tcode — Это нормально — мне просто было интересно…