Я создал ViewComponent для отображения всплывающих окон в моем WebApp, этот V C используется только как оболочка для html (с использованием bootstrap модальных типов), а всплывающее содержимое загружается через javascrit с частичной страницы. .
Когда я пытаюсь использовать помощники по тегам asp в содержимом партиала, я получаю эту ошибку:
System.ArgumentNullException: Value cannot be null. (Parameter 'viewData')
at Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpressionProvider.CreateModelExpression[TModel,TValue]
(ViewDataDictionary`1 viewData, Expression`1 expression)
Я уже добавил @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
к страница, потому что я думал, что ViewImports не были загружены.
Эти файлы используются:
<!-- Pages/Shared/Components/Popup/default.cshtml -->
@model App.ViewComponents.PopupViewModel
<div class="modal @Model.CssClasses" id="@Model.Id" tabindex="-1" role="dialog" aria-labelledby="@Model.LabeledBy" aria-hidden="true">
<div class="modal-dialog modal-lg modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header border-bottom-0">
<h5 class="modal-title" id="exampleModalLabel">@Model.Title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
</div>
</div>
</div>
</div>
<script>
$('#@Model.Id').on('show.bs.modal', function (e) {
$.get("@Model.ContentPage",
null,
data => {
$("#@Model.Id").modal("show");
$("#@Model.Id .modal-body").html(data);
});
})
</script>
// ViewComponents/Popup.cs
namespace App.ViewComponents
{
public class Popup : ViewComponent
{
public Popup()
{
}
public async Task<IViewComponentResult> InvokeAsync(PopupViewModel model)
{
return View(model);
}
}
public class PopupViewModel
{
public PopupViewModel()
{
}
public string Id { get; set; }
public string ContentPage { get; set; }
public string Title { get; set; }
public string SubTitle { get; set; }
public string CssClasses { get; set; }
public string LabeledBy { get; set; }
}
}
Вот как я загружаю всплывающее содержимое ( ajax вызывает это из V C):
public PartialViewResult OnGetCreate()
{
var createPageModel = new CreateModel();
return Partial("Create", createPageModel);
}
И это содержание частичного:
@page
@model App.Pages.CreateModel
@{
}
<form method="post">
<!-- This works -->
@Html.LabelFor(m => m.InputModel.Name)
@Html.EditorFor(m => m.InputModel.Name, new { @class = "form-control" })
<!-- This don't work -->
<label asp-for="InputModel.Description"></label>
<input asp-for="InputModel.Description" />
})
<button id="submit" asp-page-handler="New" class="btn btn-primary">Create</button>
</form>
У кого-нибудь есть какие-либо подсказки по этому поводу? Спасибо.