Razor отображает весь объект модели как значение опции от представления к контроллеру - PullRequest
0 голосов
/ 10 сентября 2018

Я ищу способ передать текущую выбранную модель из вида в контроллер. Мой выбранный код:

<select asp-for="Product">
            @foreach (var p in Model.Products)
            {
                <option value="@p">@p.ProductName</option>  
            }
        </select>

Я пытаюсь связать значение параметра @p, чтобы связать его с моим свойством ниже:

[BindProperty]
    public Product Product { get; set;}

Но всякий раз, когда после отправки моей формы свойство Product имеет "нулевые" значения. Есть предложения?

Ответы [ 2 ]

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

Обычно вы передаете Id выбранного элемента при публикации формы. Обычно этих данных достаточно для работы. Однако, если вы действительно хотите, чтобы ModelBinder создал экземпляр Product из опубликованных значений, поля формы должны иметь имена Product.ProductId и Product.ProductName. Другой ответ показывает, как получить значение ProductName, а затем присвоить его скрытому полю.

<select asp-for-"Product.ProductId" asp-items="Model.Products">
...
</select>

<input type="hidden" asp-for="Product.ProductName" />
0 голосов
/ 10 сентября 2018

Я думаю, что вы можете использовать скрытый тип для этого. Нет необходимости запрашивать имя продукта после отправки в список.

<input type="hidden" asp-for="ProductName" />
    <select asp-for="ProductId">
                @foreach (var p in Model.Products)
                {
                    <option value="@p.Id">@p.ProductName</option>  
                }
            </select>

<script>
        $(function () {
            $('form').submit(function () {                
                var productName = $('#ProductId option:selected').text();
                $('#ProductName').val(productName);
             });
         });
    </script>
...