Как мне использовать (попробовать) UpdateModel? - PullRequest
2 голосов
/ 29 июля 2011

Как правильно использовать (попробовать) UpdateModel?

Когда я запускаю это:

  • TryUpdateModel возвращает true,
  • ViewData не имеет ошибок,
  • но мой Proxy не обновляется.

Метод действия

public void Save(string TypeName, int Id, FormCollection idontknow) {
    var types = Assembly.GetExecutingAssembly().GetTypes();
    var ObjectType=(from t in types where t.Name == TypeName select t).First();
    var Proxy = context.Set(ObjectType).Find(Id); // EF 4.1
    if (TryUpdateModel(Proxy, TypeName)) {
        var x = ViewData.GetModelStateErrors(); // no errors
    }
}

Опубликованные данные

TypeName=Thing&Id=1&Thing.Id=1&Thing.Name=hello&Thing.OptionID=2

класс вещей

public class Thing : Base {
    public virtual Nullable<int> OptionID { get; set; }
    public virtual Option Option { get; set; }
    public virtual ICollection<ListItem> ListItems { get; set; }
}
public class Base {
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    [NotMapped]
    public virtual int? EntityState { get; set; }
}

РЕДАКТИРОВАТЬ: Я также пытался явно передать коллекцию форм TryUpdateModel(Proxy, TypeName, idontknow)

РЕДАКТИРОВАТЬ # 2: (в ответ на NickLarsen)

  1. Перезапущен VS и сервер, без изменений.
  2. Значения фактически находятся в FormCollection.
  3. Поддельные данные работают! Я знаю, что, должно быть, здесь что-то напортачили
  4. Использование отладчика для проверки значений.

1 Ответ

1 голос
/ 29 июля 2011

Я удалил все вещи EF и попытался получить только эту строку запроса, чтобы заполнить модель значениями ... и она работала просто отлично.

//controller class
public ActionResult Save(string TypeName, int Id, FormCollection idontknow)
{
    var Proxy = new Thing
    {
        Id = 33,
        OptionID = 2234,
        Name = "tony",
    };
    if (TryUpdateModel(Proxy, TypeName))
    {
        ViewBag.Message = "WInner";
    }

    return RedirectToAction("Index");
}
//end controller class

public class Thing : Base
{
    public virtual Nullable<int> OptionID { get; set; }
}
public class Base
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

Честно говоря, я не могу понять, подуматьчто в вашем коде будет препятствовать его работе, но я бы посоветовал пройти список по одному и протестировать после каждого шага ...

  1. Сохраните ваш прогресс и перезапустите VS и ваш сервер разработки
  2. Убедитесь, что значения на самом деле находятся в данных формы, возможно, что-то там мешает.
  3. Создайте макет некоторых данных мусора, как я.(проверка, связана ли проблема с EF)
  4. Как вы определяете, что прокси не обновляется?В отладчике, на странице и т. Д.
  5. Отредактируйте свой вопрос, ответив на все вышеупомянутые вопросы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...