ASP.NET MVC - Post可以在dev机器上运行,但不能在live上运行

时间:2010-01-31 21:04:30

标签: c# asp.net asp.net-mvc post

我有一个编辑页面,我想用它来编辑用户详细信息。当我更新一些用户详细信息并在我的开发机器上发布时,它按预期工作,详细信息保存到数据库,然后我被重定向到显示更新信息的详细信息页面。

当我将网站发布到实时服务器并执行相同的操作时,它基本上不会离开编辑页面。页面成功发布和重定向的唯一时间是,如果没有任何细节从原始值更改。

以下是发布的代码:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
    var repo = new UserRepository();
    var user = repo.GetById(id);
    try
    {
        double value;
        foreach(var stat in user.Stats)
        {
            var rawValue = formValues[stat.Name];
            if (Double.TryParse(rawValue, out value))
            {
                stat.Value = value;
            }
            else
            {
                ModelState.AddModelError(stat.Name+"Err", "Value must be numerical.");
            }
        }
        UpdateModel(user);

        if (ModelState.IsValid)
        {
            repo.Save();
            return RedirectToAction("details", new { id = user.ID });
        }
        else
            throw new InvalidOperationException();
    }
    catch
    {
        foreach (var issue in user.GetRuleViolations())
        {
            ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
        }
        return View(user);
    } 
}

我在Windows Server 2003 + IIS 6.0上

3 个答案:

答案 0 :(得分:3)

您确定没有看到正确的行为吗?您正在使用通用的try-catch方法,如果出现问题,它只会返回视图。假设您的repo.Save()方法失败,没有“规则违规” - 那么您将再次看到您的视图,因为没有任何特定代码可以处理其他任何内容。

答案 1 :(得分:0)

你在开发机器上运行了什么以及你在现场机器上运行了什么?

这可能与IIS 6处理路由的能力有关。

修改

Windows 7运行IIS 7 Windows 2003运行IIS 6

这是我认为你的谎言。

以下链接可能有所帮助:

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

答案 2 :(得分:0)

在我看来尝试更新数据时出错...可能是某种数据连接问题或数据类型错误?您没有提到数据是否实际保存,以及唯一的问题是重定向......这是什么?

我几乎可以肯定数据没有保存到数据库中,因此我建议您仔细查看数据库连接,以确保数据库连接对发布的站点有效。如果数据库连接似乎正确,则验证您输入的数据在数据库中是否有效。

您还可以稍微更改代码,以便在ModelState.IsValid返回false的情况下通过重定向用户来查明问题是否与数据库有关:

return RedirectToAction("errorpage");