ASP.NET MVC Updatemodel не обновляется, но не выдает ошибку - PullRequest
1 голос
/ 22 сентября 2009

Есть идеи, почему это не обновляется, но не выдает ошибку?

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

Ответы [ 2 ]

5 голосов
/ 23 сентября 2009

Иногда может случиться, что где-то внутри сборки 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 вы увидите любые необработанные исключения в процессе привязки модели, если в этом и заключается проблема.

Удачи!

1 голос
/ 21 марта 2011

При использовании Linq to Sql для классов моделей, если вы обновляете таблицу, в которой нет первичного ключа , то вызов метода updateModel() не обновит данные и не даст никакой ошибки либо. Решение в таком случае заключается в использовании методов ExecuteCommand или ExecuteQuery с Object вашего класса 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);
...