【问题标题】:Why Html.Hidden is not working in C# ASP.NET MVC razor view?为什么 Html.Hidden 在 C# ASP.NET MVC razor 视图中不起作用?
【发布时间】:2020-01-30 21:48:19
【问题描述】:

我想在我的 razor 视图中使用 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 lopps 通过项目,隐藏的输入并没有在渲染后添加到我的 HTML 源代码中。但是这个工作得很好,我不知道为什么Html.Hidden 不起作用:

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

【问题讨论】:

  • 你在FilterViewModel上有一个ToString实现吗?尝试将commodity.commodityType(或任何字符串属性)放入方法调用中。在工作代码中设置了什么值?
  • 在您的 html 中有多个相同的id 值可能会导致问题。
  • @PeterSmith 我猜选择选择器会做同样的事情,但可能我错了!
  • 有很多答案警告多个相同 ID 的危险;例如,参见this。尝试改用class
  • 我添加了一个替代答案,以避免多个相同 ID 的问题。

标签: c# html asp.net-mvc razor


【解决方案1】:

您在Html.Hidden 之前错过了@

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

顺便说一句,你应该考虑在你的 html 中没有相同的 id 以避免任何问题。

【讨论】:

  • 这里的@ 是什么意思?以及为什么编译器没有提示任何错误?
【解决方案2】:

要避免多个相同的 id 值问题,请尝试以下(未测试):

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

使用带有.commodities 而不是#commodities 的jQuery 选择器。

【讨论】:

    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多