我有一个编辑页面,我想用它来编辑用户详细信息。当我更新一些用户详细信息并在我的开发机器上发布时,它按预期工作,详细信息保存到数据库,然后我被重定向到显示更新信息的详细信息页面。
当我将网站发布到实时服务器并执行相同的操作时,它基本上不会离开编辑页面。页面成功发布和重定向的唯一时间是,如果没有任何细节从原始值更改。
以下是发布的代码:
[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上
答案 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");