Почему нам следует использовать компоненты представления функций MVC 6 вместо частичного представления: в чем разница?
Мой вопрос простой: если я могу что-то сделать с помощью ViewComponent, есть ли веская причина не делать этого?
Большое спасибо!
Пример приведен ниже для контекста.
Вызовы основного представления:
ViewComponent:
@await Component.InvokeAsync("CreatePerson", new Person())
По сравнению с частичным просмотром:
@{ await Html.RenderPartialAsync("People/CreatePartialView", new Person());}
Javascript (personCreateForm — это форма в компоненте частичного представления/представления):
var submitPersonCreate = function(evt) {
evt.preventDefault();
if ($(this).valid())
{
$.ajax({
type: "POST",
url: '@Url.Action("CreatePartial", "People")',
data: $('#personCreateForm').serialize(),
success(data) {
if (data === true)
window.location.reload();
else
$('#modalPersonInner').html(data);
}
});
}
return false;
}
$('#personCreateForm').submit(submitPersonCreate);
Код контроллера:
public async Task CreatePartial(
[Bind("AddressLine1,AddressLine2,AddressLine3,AddressLine4,City,Country,Email,Forename,MobileNumber,Postcode,Region,Surname,TelephoneNumber")] Person person)
{
if (ModelState.IsValid)
{
_context.Add(person);
await _context.SaveChangesAsync();
return Json(true);
}
//PARTIAL VIEW VERSION
//return PartialView("People/CreatePartialView",person);
//VIEWCOMPONENT VERSION
return ViewComponent("CreatePerson", person);
}
Код ViewComponent:
public class CreatePersonViewComponent : ViewComponent
{
private readonly AppDbContext db;
public CreatePersonViewComponent(AppDbContext context)
{
db = context;
}
public async Task InvokeAsync(Person person )
{
return View(person ?? new Person());
}
}
И, наконец, страница Razor, к о т о р а я о д и н а к о в а д л я о б о и х : < / p > < b r / > < b r / > < c o d e > @ m o d e l P e r s o n < b r / > < b r / > & l t ; f o r m I D = " p e r s o n C r e a t e F o r m " & g t ; < b r / > & l t ; d i v c l a s s = " f o r m - h o rizontal">
Customer
Подробнее здесь: https://stackoverflow.com/questions/382 ... al-view-in