【问题标题】:ASP.NET MVC - Post works on dev machine, but not on liveASP.NET MVC - 发布在开发机器上工作,但不在现场
【发布时间】:2010-01-31 21:04:29
【问题描述】:

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

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

这是发帖的代码:

[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

【问题讨论】:

  • 这是发布到托管服务器还是您可以完全控制的服务器?您有权访问系统日志吗?
  • @Jay,我可以完全控制服务器。我应该检查哪些日志?

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


【解决方案1】:

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

【讨论】:

  • @reallyJim,实际上很好,ModelState.IsValid 只会验证 User 属性而不是 User.Stats 属性。因此,内部可能存在问题,因为没有 ModelErrors 可以显示任何内容。我如何验证是否是这种情况?
  • 在 catch 块中重新抛出异常以隔离问题。
  • 我想说的是捕获一个实际的异常并记录它——你可能会在它的细节中发现一些你没想到的东西。
  • 发现,实际上是 Live DB 上的权限问题!谢谢。
【解决方案2】:

你在 dev 机器上运行什么,你在 live 机器上运行什么?

这可能与 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

【讨论】:

  • 您能详细说明一下run吗?我通过“在浏览器中查看页面”选项在 VS2008 内的开发机器上运行该网站。我的开发机器是 Windows 7。
  • @Burt,我实际上已经完成了那个特定的教程,我已经设置了 MVC 通配符等。一旦发布,网站本身实际上是一个虚拟目录,如果有帮助的话。
【解决方案3】:

在我看来,尝试更新数据时出现错误...可能是某种数据连接问题或数据类型错误?你没有提到数据是否真的被保存了,如果唯一的问题是重定向......它是什么?

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

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

return RedirectToAction("errorpage");

【讨论】:

  • @Ricardo,我非常有信心数据库连接不是问题,页面填充良好,是在发布和更新模型时出现问题。跨度>
  • 看来将数据保存到数据库毕竟是个问题。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-02
  • 2013-03-27
  • 2017-05-22
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多