Использование asp для TagHelper на частичной странице - PullRequest
0 голосов
/ 28 января 2020

Я создал 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">&times;</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>

У кого-нибудь есть какие-либо подсказки по этому поводу? Спасибо.

1 Ответ

1 голос
/ 28 января 2020

@page в верхней части части имеет значение null, что является причиной этой ошибки.

...