2

我在 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 配置为使用我自己的数据库。连接有效,因为我可以注册一个新用户,并且该新用户已登录成功注册。

4

2 回答 2

1

[编辑]

好的,现在你已经更新了你的问题,更新了答案。我认为问题很可能归结为您没有在初始获取 Add 操作的请求中初始化模型。尝试添加HttpGetandHttpPost如下:

[HttpGet]
public ActionResult Add()
{
    var viewModel = new AddToCartViewModel() 
    {
        Id = "myid", 
        Quantity = 0
    };
    return View(viewModel);
}

[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 });
}

我相信这现在可以工作了。

于 2012-07-09T17:10:36.580 回答
0

使用强类型的 html 助手

@Html.HiddenFor(m => m.Id)     
@Html.TextBoxFor(m => m.Quantity, new { size = "1" }) 

并确保您已将操作标记为[HttpPost].

于 2012-07-09T16:21:48.943 回答