我在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方法的签名以获取字符串和int,但抛出异常,因为数量为null。
抓住吸管,我运行以下命令以确保.NET 4.0已注册,看起来很好。我有2.0.50727.0,x32和x64版本为4.0.30319.0
根据Phil Haack's instructions部署应用程序的bin无法正常工作
我没有想法,因为一切都在Visual Studio中工作,我找不到其他同样问题的帖子。我只是缺少一些简单的东西吗?另外,我刚注意到通过帐户控制器登录也无法在服务器上运行。没有显示错误或验证问题。我正在使用默认的成员资格提供程序,但是web.config配置为使用我自己的数据库。连接有效,因为我可以注册新用户并且新用户在成功注册时已登录。
答案 0 :(得分:1)
<强> [编辑] 强>
好的,现在更新了您的问题后更新了答案。我认为这个问题很可能是因为您没有在添加操作的初始get请求中初始化模型。尝试按以下方式添加HttpGet
和HttpPost
:
[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 });
}
我确定现在可以使用。
答案 1 :(得分:0)
使用强类型的html助手
@Html.HiddenFor(m => m.Id)
@Html.TextBoxFor(m => m.Quantity, new { size = "1" })
并确保已使用[HttpPost].