. NET Базовая форма частичного просмотра не регистрирует внешний ключ - PullRequest
0 голосов
/ 23 февраля 2020

Хорошо, так что в одном из моих видов у меня есть частичный вид, который я называю так:

<partial name="_StoryFormPartial" model='new Story { BoardColumn = @boardColumn, StoryTitle = "test"}' >

Как вы можете видеть, я создаю новую модель для частичного вида, BoardColumn, которая является моделью и StoryTitle. Оба атрибута полностью используются в частичном представлении. Однако частичное представление является формой, и после публикации этой формы я больше не могу получить доступ к BoardColumn в контроллере.

Вот мое частичное представление:

        <form asp-controller="Story" asp-action="Create">
            <h1>@Model.BoardColumn.BoardColumnName</h1>
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>

            <input type="hidden" asp-for="BoardColumn" value="@Model.BoardColumn" />

            <div class="form-group">
                <label asp-for="StoryTitle" class="control-label"></label>
                <input asp-for="StoryTitle" class="form-control" />
                <span asp-validation-for="StoryTitle" class="text-danger"></span>
            </div>

            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
                <a style="cursor:pointer;color:white;" id="close_form_@Model.BoardColumn.BoardColumnId" class="btn btn-danger">X</a>
            </div>
        </form>

Как я уже сказал, когда я отправляю это сообщение, я больше не могу использовать Boardcolumn и получаю сообщение об ошибке 'NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта. Я бы оценил любую помощь, которую я могу получить в этом вопросе.

Я решил это, отправив вместо этого идентификатор, а затем нашел правильный столбец в контроллере, есть ли их лучший способ сделать это?

1 Ответ

0 голосов
/ 24 февраля 2020

Вы не можете привязать сложный объект к входу - вход только отправляет обратно одно значение.

Если вы хотите отправить объект Boardcolumn в контроллер, вы можете изменить следующий код:

<input type="hidden" asp-for="BoardColumn" value="@Model.BoardColumn" />

до

<input type="hidden" asp-for="BoardColumn.BoardColumnId" />
<input type="hidden" asp-for="BoardColumn.BoardColumnName" />

Результат : enter image description here

Для вспомогательного тега ввода с asp -for, вы можете обратиться к https://docs.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.1#the -input-тег-хелперов

...