任何想法为什么这不会更新但不会引发错误?
public ActionResult Edit(int id, [Bind(Exclude = "deptid")]FormCollection collection)
{
var department = _repository.ListOne(id); //Grabs record from linq to sql
try
{
UpdateModel(department);
_entities.SubmitChanges();
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View(department);
}
}
答案 0 :(得分:5)
有时可能发生的事情是在MVC程序集内部某处抛出错误,该错误处理不当,并且不会按预期复制到模型状态。然后,当您尝试在视图中显示Html.ValidationSummary
时,它不会显示错误,这可能非常令人困惑。我写过关于here的模型绑定过程可能崩溃的一个例子。通常,在您弄清楚为什么会发生这种情况之后,您可以对代码进行更正,而不再担心它。
我在调试期间使用以下代码进行检查,让我在断点处将鼠标悬停在它上面并查看实际情况:
public static IDictionary<string, string> GetModelStateErrors(this ViewDataDictionary viewDataDictionary)
{
Dictionary<string, string> dict = new Dictionary<string, string>();
foreach (var modelStateKey in viewDataDictionary.ModelState.Keys)
{
var modelStateValue = viewDataDictionary.ModelState[modelStateKey];
foreach (var error in modelStateValue.Errors)
{
var errorMessage = error.ErrorMessage;
var exception = error.Exception;
if (!String.IsNullOrEmpty(errorMessage))
{
dict.Add(modelStateKey, "Egads! A Model Error Message! " + errorMessage);
}
if (exception != null)
{
dict.Add(modelStateKey, "Egads! A Model Error Exception! " + exception.ToString());
}
}
}
return dict;
}
然后,我可以在尝试UpdateModel后插入它,并在其上设置断点:
var x = ViewData.GetModelStateErrors();
在致电UpdateModel
后立即行动。将鼠标悬停在x
上会在模型绑定过程中显示任何未处理的异常,如果这就是问题所在。
答案 1 :(得分:1)
对模型类使用 Linq to Sql 时,如果要针对没有主键的表进行更新,则调用updateModel()
方法不会更新数据,也不会给出任何错误。
在这种情况下,解决方案是使用ExecuteCommand
或ExecuteQuery
方法与DataContext类的Object。
例如:
MyDataContext db= new MyDataContext();
string name="test";
int roll=123;
string UpdateStatement="Update table xyz set name='+ name+"' where roll="+ roll;
db.ExecuteCommand(UpdateStatement);