1

任何想法为什么这不会更新但不会引发错误?

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);
        }
    }
4

2 回答 2

5

有时可能发生的情况是在 MVC 程序集内部的某个地方抛出了一个错误,该错误没有得到很好的处理,并且没有按预期复制到您的模型状态中。然后,当您尝试在视图中显示 时Html.ValidationSummary,它不会向您显示错误,这可能会非常令人困惑。一个可以使我在这里写过的模型绑定过程崩溃的例子。通常,在弄清楚为什么会发生这种情况之后,您可以对代码进行更正,而不必再担心了。

我有以下代码,用于在调试期间检查,让我将鼠标悬停在断点处并查看实际情况:

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将向您显示模型绑定过程中的任何未处理的异常,如果这确实是这里的问题。

祝你好运!

于 2009-09-22T21:31:37.723 回答
1

在将Linq to Sql用于模型类时,如果您要针对没有Primary Key的表进行更新,则调用updateModel()方法将不会更新数据,也不会给出任何错误。在这种情况下,解决方案是使用ExecuteCommandExecuteQuery方法与您的 DataContext 类的对象。

前任:

MyDataContext db= new MyDataContext();
string name="test";
int roll=123;

string UpdateStatement="Update table xyz set name='+ name+"' where roll="+ roll;
db.ExecuteCommand(UpdateStatement);
于 2011-03-21T08:38:55.010 回答