我正在关注一本书,这是代码:
@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)
答案 0 :(得分:3)
您需要记住,这些帮助程序只是生成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
与productId
控制器操作的已定义参数RemoveFromCart
不匹配。
值得注意的是,模型绑定不区分大小写。因此,ProductId
的隐藏输入值仍将绑定到RemoveFromCart
的{{1}}参数。
答案 1 :(得分:1)
在您的RemoveFromCart(Cart cart, int productId, string returnURL)
中,您有一个显式变量,特别是int productId
。它会在HTML中使用一个名为"ProductId
的字段来填充值。如果您使用Html.HiddenFor
帮助程序,它会生成全名的字段变量,生成一个名为"Product_ProductID"
的HTML字段。模型绑定器无法将带有此字段名称的HTML与函数调用中的正确参数匹配。
答案 2 :(得分:1)
如果您的ViewModel属性只需通过视图而不需要任何复杂的处理,请使用HiddenFor。
&#34; Hidden&#34;方法是更自定义的数据绑定方式,并不一定与您的ViewModel相关,而是与Form相关。
&#34; HiddenFor&#34; method只是直接绑定ViewModel属性的自动方式。