【问题标题】:Can't understand How to decide when to use Hidden() and when to use HiddenFor()不明白如何决定何时使用 Hidden() 以及何时使用 HiddenFor()
【发布时间】:2015-01-01 19:47:08
【问题描述】:

我正在关注一本书,这里是代码:

@using (Html.BeginForm("RemoveFromCart", "Cart"))
{
    @Html.Hidden("ProductId", line.Product.ProductID)
    @Html.HiddenFor(x => x.ReturnUrl)
    <input class="btn btn-sm btn-warning" type="submit" value="Remove" />
}

这也是他为什么使用Hidden而不是HiddenFor的解释

但我仍然无法理解他所说的背后的接线。你能详细说明一下吗?

public RedirectToRouteResult RemoveFromCart(Cart cart, int productId, string returnUrl)

【问题讨论】:

  • 你的Model是什么样的?

标签: c# asp.net-mvc asp.net-mvc-5 html-helper hidden-field


【解决方案1】:

您需要记住,这些助手只是生成 HTML 标记的方法。

生成的标记示例:

@Html.Hidden("ProductId", line.Product.ProductID)

生成: &lt;input type="hidden" name="ProductId" value="5" /&gt;

@Html.HiddenFor(x => x.Product.ProductID)

生成: &lt;input type="hidden" name="Product_ProductId" value="5" /&gt;

您的控制器定义了一个名为productId 的参数。为了使模型绑定起作用,隐藏输入的name 值必须与参数名称匹配。

Product_ProductIdRemoveFromCart 控制器操作的定义参数 productId 不匹配。

值得注意的是,模型绑定不区分大小写。因此,ProductId 的隐藏输入值仍将绑定到 productIdRemoveFromCart 参数。

【讨论】:

    【解决方案2】:

    在您的RemoveFromCart(Cart cart, int productId, string returnURL) 中有一个显式变量,特别是int productId。它会期望在 HTML 中有一个名为 "ProductId 的字段来填充值。如果您使用 Html.HiddenFor 帮助器,它会生成具有变量的全名的字段,从而在名为 "Product_ProductID" 的 HTML 字段中。模型绑定器将无法将具有此字段名称的 HTML 与函数调用中的正确参数匹配。

    【讨论】:

      【解决方案3】:

      如果您的 ViewModel 属性只需通过视图而不进行任何复杂的处理,请使用 HiddenFor。

      “隐藏”方法是更自定义的数据绑定方式,不一定与您的 ViewModel 相关,而是与表单相关。

      “HiddenFor”方法只是 ViewModel 属性直接绑定的自动化方式。

      【讨论】:

        猜你喜欢
        • 2019-06-24
        • 2020-04-29
        • 1970-01-01
        • 2016-11-16
        • 2017-12-22
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多