我在 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 {})
我尝试更改操作方法的签名以获取字符串和 int,但由于数量为空而引发异常。
抓住稻草,我运行了以下命令以确保 .NET 4.0 已注册,看起来还不错。我有 2.0.50727.0,以及 4.0.30319.0 的 x32 和 x64 版本
按照Phil Haack 的说明部署应用程序的 Bin也不起作用
我没有想法,因为在 Visual Studio 中一切正常,我找不到其他有同样问题的帖子。我只是缺少一些简单的东西吗?另外,我刚刚注意到通过帐户控制器登录在服务器上也不起作用。没有显示错误或验证问题。我正在使用默认的成员资格提供程序,但 web.config 配置为使用我自己的数据库。连接有效,因为我可以注册一个新用户,并且该新用户已登录成功注册。