Почему Html .Hidden не работает в режиме C# ASP. NET MVC. - PullRequest
2 голосов
/ 30 января 2020

Я хочу заполнить скрытые входные данные для формы, используя foreach в моем представлении бритвы. Это выглядит так:

@foreach (var commodity in ((FilterViewModel)ViewBag.ViewModel).commodities)
{
    Html.Hidden("commodities", commodity);
}

и вот моя ViewModel:

public class FilterViewModel
{
    public string commodityType { get; set; }
    public string department { get; set; }
    public string repository { get; set; }
    public string[] commodities { get; set; }
    public string[] purchaseReportTypes { get; set; }
    public string dateValue_1 { get; set; }
    public string dateValue_2 { get; set; }
}   

Хотя foreach пропускает элементы, скрытые входы не добавляются в мой источник HTML после рендеринга. Однако этот работает просто отлично, и я не знаю, почему Html.Hidden не работает:

@foreach (var commodity in ((FilterViewModel)ViewBag.ViewModel).commodities)
{
    <input type="hidden" id="commodities" name="commodities" value="@commodity" />
}

Ответы [ 2 ]

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

Вы пропускаете @ до Html.Hidden

@foreach (var commodity in ((FilterViewModel)ViewBag.ViewModel).commodities)
{
    @Html.Hidden("commodities", commodity);
}

Кстати, вы должны рассмотреть вопрос о том, чтобы не иметь тот же идентификатор в вашем html, чтобы избежать любой проблемы.

0 голосов
/ 30 января 2020

Чтобы избежать проблемы множественных идентичных значений идентификаторов, попробуйте следующее (не проверено):

@int idCount = 0;
@foreach (var commodity in ((FilterViewModel)ViewBag.ViewModel).commodities)
{
    idCount++;
    @Html.Hidden($"commodities{idCount}", commodity, new { @class="commodities"});
}

Используйте селектор jQuery с .commodities вместо #commodities.

...