【发布时间】:2012-07-09 16:07:43
【问题描述】:
我在 Windows 2008 R2 服务器 (IIS 7.5) 上运行几个经典的 ASP 网站,并添加了一个简单的 MVC3 电子商务网站。问题是当我尝试使用表单从产品页面将商品添加到购物车时。使用 Razor 语法,我有以下代码:
@using (Html.BeginForm("Add", "Cart", FormMethod.Post, new { }))
{
@Html.HiddenFor(m => m.Id)
@Html.TextBoxFor(m => m.Quantity, new { size = "1" })
<input type="submit" value="Add to Cart"/>
}
public class AddToCartViewModel
{
public string Id { get; set; }
public int Quantity { get; set; }
}
[HttpPost]
public ActionResult Add(AddToCartViewModel cartItem)
{
// Code that adds the item to the cart
// Go back to the product page
return RedirectToAction("Model", "Product", new { id = cartItem.Id });
}
问题在于 ModelId 和 Quantity 没有填充表单中的数据。 cartItem 不为 null,并且正在调用此操作。此代码在通过 Visual Studio 2010 运行时完美运行,所以我猜测它是服务器和/或 IIS 配置设置。奇怪的是,我还有另一个购物车页面,允许用户更新购物车中的商品数量,效果非常好。该页面更复杂,因为它使用视图模型中的列表,所以我看不出为什么我的简单请求会失败。
使用 ActionLink(带有硬编码数量)而不是表单有效。
@Html.ActionLink("Add to cart", "Add", "Cart", new { Id = Model.Id, Quantity = 1}, new {})
我尝试将 action 方法的签名更改为采用 string 和 int,但由于数量为空而引发异常。
抓住最后一根稻草,我运行了以下命令以确保 .NET 4.0 已注册,而且看起来还不错。我有 2.0.50727.0,以及 4.0.30319.0 的 x32 和 x64 版本
按照 Phil Haack's instructions 部署应用程序的 Bin 也不起作用
我没有想法,因为在 Visual Studio 中一切正常,我找不到其他有同样问题的帖子。我只是缺少一些简单的东西吗?另外,我刚刚注意到通过帐户控制器登录在服务器上也不起作用。没有显示错误或验证问题。我正在使用默认的成员资格提供程序,但 web.config 配置为使用我自己的数据库。连接有效,因为我可以注册一个新用户,并且该新用户已登录成功注册。
【问题讨论】:
-
@OmerAmsel 是的,它已声明并填充。表单在页面上具有正确的值。该表单位于以
AddToCartViewModel为模型的强类型部分视图中。我发布的是部分视图,仅减去模型声明。 -
调试 action 方法并检查请求,以确保您的值在实际 Post 中,并且它们与模型中的属性具有完全相同的名称。
标签: asp.net-mvc-3 asp.net-mvc-routing