我们有一个标准表单,可以将模型发布到端点并保存/更新数据库中的数据。在本地,表单每次都有效,并更新模型,从而更新数据库。然而,在生产服务器上,保存是间歇性的,有时它可以工作,有时它不会。当它失败时,页面将重新加载新添加的数据,但在页面的额外GET请求之后,旧数据将再次显示。
我已经在各个点记录了POST数据,即使发送失败,所需的一切也都会被发送到端点。我可以得到我的头脑是为什么有时它会节省,有时它不会。
使用:MS Windows Server 2012,ASP.NET MVC 4,IIS 7.5
相当困在旁边的地方追踪问题?我们将非常感谢您追踪此问题的任何帮助!
以下是相关表格:
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
<div class="form-row" style="margin-top: 60px;">
@Html.LabelFor(m => m.FirstName)
@Html.EditorFor(m => m.FirstName, Model.FirstName)
@Html.ValidationMessageFor(m => m.FirstName)
</div>
<div class="form-row">
@Html.LabelFor(m => m.LastName)
@Html.EditorFor(m => m.LastName, Model.LastName)
@Html.ValidationMessageFor(m => m.LastName)
</div>
<div class="form-row">
@Html.LabelFor(m => m.DateOfBirth)
@Html.EditorFor(m => m.DateOfBirth, Model.DateOfBirth)
@Html.ValidationMessageFor(m => m.DateOfBirth)
</div>
<div class="form-row bottom-line">
@Html.LabelFor(m => m.Gender)
@Html.RadioButtonForEnum(m => m.Gender, "gender-wrapper")
</div>
<div class="form-row">
@Html.LabelFor(m => m.Headline)
@Html.EditorFor(m => m.Headline, Model.Headline)
@Html.ValidationMessageFor(m => m.Headline)
</div>
<div class="form-row">
@Html.LabelFor(m => m.Industry)
@Html.DropDownListFor(m => m.Industry, (SelectList)ViewBag.Industries, new { @class = "industry-select" })
@Html.ValidationMessageFor(m => m.Industry)
</div>
<div class="form-row">
@Html.LabelFor(m => m.Position)
@Html.EditorFor(m => m.Position)
</div>
<input type="submit" value="save" />
}
终点:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Settings([ModelBinder(typeof(DateTimeModelBinder))]UserSettingsViewModel model)
{
var user = userService.LoadUser(User.UserId);
ViewBag.Industries = new SelectList(userService.GetAllIndustries(), "Name", "Name", user.Industry);
if (ModelState.IsValid)
{
Mapper.Map(model, user);
userService.UpdateUser(user);
model = Mapper.Map<User, UserSettingsViewModel>(user);
}
else //leave the model intack to correct errors, just set the other tab data
{
model.Education = Mapper.Map<IList<UserEducation>, IList<EducationViewModel>>(user.UserEducations.ToList());
model.Employment = Mapper.Map<IList<UserEmployment>, IList<EmploymentViewModel>>(user.UserEmployments.ToList());
}
return View(model);
}
还有一个自定义模型绑定器,用于从日期,月份,年份下拉列表和日期时间类型的自定义编辑器创建日期时间。如果需要也可以显示这些。
答案 0 :(得分:0)
我认为现在的问题是,您现在遇到了N层系统的问题,但您不知道该问题存在于哪个层级。我要做的第一件事就是在数据库和数据库上启动SQL分析器。在问题发生时运行跟踪。如果您在发生故障时没有看到任何通信,那么这很好,因为您可能已经消除了50%的潜在问题并且可以专注于mvc应用程序。
另一方面,如果数据在所有情况下都被发送到数据库,那么您就知道数据库代码存在问题。