MVC3 - 空值发布到操作

时间:2012-07-09 16:07:43

标签: asp.net-mvc-3 asp.net-mvc-routing

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

2 个答案:

答案 0 :(得分:1)

<强> [编辑]

好的,现在更新了您的问题后更新了答案。我认为这个问题很可能是因为您没有在添加操作的初始get请求中初始化模型。尝试按以下方式添加HttpGetHttpPost

[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].

标记了操作