无法理解如何决定何时使用 Hidden() 以及何时使用 HiddenFor()
Can't understand How to decide when to use Hidden() and when to use HiddenFor()
我正在关注一本书,这是代码:
@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)
您需要记住,这些助手只是生成 HTML 标记的方法。
生成的标记示例:
@Html.Hidden("ProductId", line.Product.ProductID)
生成:
<input type="hidden" name="ProductId" value="5" />
@Html.HiddenFor(x => x.Product.ProductID)
生成:
<input type="hidden" name="Product_ProductId" value="5" />
您的控制器定义了一个名为 productId
的参数。为了使模型绑定起作用,隐藏输入的 name
值必须与参数名称匹配。
Product_ProductId
将不匹配为 RemoveFromCart
控制器操作定义的参数 productId
。
值得注意的是,模型绑定是不区分大小写的。 所以你的 ProductId
的隐藏输入值仍然会绑定到 RemoveFromCart
参数=14=].
在您的 RemoveFromCart(Cart cart, int productId, string returnURL)
中,您有一个显式变量,特别是 int productId
。它需要在 HTML 中有一个名为 "ProductId
的字段来填充值。如果您使用 Html.HiddenFor
助手,它会生成带有 full 的字段变量的名称,导致名为 "Product_ProductID"
的 HTML 字段。模型绑定器无法将具有此字段名称的 HTML 与函数调用中的正确参数相匹配。
如果您的 ViewModel 属性 只需要通过视图传递而不需要任何复杂的处理,请使用 HiddenFor。
"Hidden" 方法是更自定义的数据绑定方式,不一定与 ViewModel 相关,但与 Form 相关。
"HiddenFor" 方法只是直接绑定 ViewModel 属性的自动化方式。
我正在关注一本书,这是代码:
@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)
您需要记住,这些助手只是生成 HTML 标记的方法。
生成的标记示例:
@Html.Hidden("ProductId", line.Product.ProductID)
生成:
<input type="hidden" name="ProductId" value="5" />
@Html.HiddenFor(x => x.Product.ProductID)
生成:
<input type="hidden" name="Product_ProductId" value="5" />
您的控制器定义了一个名为 productId
的参数。为了使模型绑定起作用,隐藏输入的 name
值必须与参数名称匹配。
Product_ProductId
将不匹配为 RemoveFromCart
控制器操作定义的参数 productId
。
值得注意的是,模型绑定是不区分大小写的。 所以你的 ProductId
的隐藏输入值仍然会绑定到 RemoveFromCart
参数=14=].
在您的 RemoveFromCart(Cart cart, int productId, string returnURL)
中,您有一个显式变量,特别是 int productId
。它需要在 HTML 中有一个名为 "ProductId
的字段来填充值。如果您使用 Html.HiddenFor
助手,它会生成带有 full 的字段变量的名称,导致名为 "Product_ProductID"
的 HTML 字段。模型绑定器无法将具有此字段名称的 HTML 与函数调用中的正确参数相匹配。
如果您的 ViewModel 属性 只需要通过视图传递而不需要任何复杂的处理,请使用 HiddenFor。
"Hidden" 方法是更自定义的数据绑定方式,不一定与 ViewModel 相关,但与 Form 相关。
"HiddenFor" 方法只是直接绑定 ViewModel 属性的自动化方式。