Атрибут недостающего значения .net core mvc HiddenFor helper - PullRequest
0 голосов
/ 19 сентября 2018

По какой-то причине помощник HiddenFor в .NET Core (2.1.4) MVC не устанавливает значение для скрытого элемента ввода, несмотря на то, что значение присутствует в представляемом им свойстве модели.

Если я вручнуюсоздайте скрытый атрибут и используйте IdFor, NameFor и вручную установите значение, которое оно работает, как и ожидалось.

    // This works and has a value attribute with a value
    <input type="hidden" id="@Html.IdFor(x => x.Fields[componentIndex].Value)" name="@Html.NameFor(x => x.Fields[componentIndex].Value)" value="@Model.Fields[componentIndex].Value"/>

    // This has a value attribute but it's empty
    @Html.HiddenFor(x => x.Fields[componentIndex].Value)

Обратите внимание, что в обоих случаях сгенерированные имена и идентификаторы совпадают.

Если я используюHiddenFor и предоставляют new { @Value=... } значение, которое он также не устанавливает.

Единственное отличие между HiddenFor, которые устанавливают значение (с использованием того же кода, но другого индекса компонента), заключается в том, что они предоставляютсяна пост, и этот проблемный задается в контроллере.

1 Ответ

0 голосов
/ 19 сентября 2018

В ASP.NET Core вы можете использовать Tag Helper asp-for, поэтому скрытый будет выглядеть так:

<input asp-for="ModelPropertyName" type="hidden" />

Но для списков привязки к POST действиями контроллера иногда легче явно отобразить скрытые (как и вы), потому что скрытые входные имена должны соответствовать формату имен привязки коллекции, например Fields[i].Value, где i - индекс коллекции.

Подробнее о проверке привязки коллекции Привязка модели в ASP.NET Core

...