2

(Try)UpdateModel を使用する正しい方法は何ですか?

これを実行すると:

  • TryUpdateModeltrue を返し、
  • 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; }
}

EDIT:フォームコレクションを明示的に渡そうとしました TryUpdateModel(Proxy, TypeName, idontknow)

編集#2:(NickLarsenへの返信)

  1. VSとサーバーを再起動しましたが、変化はありません。
  2. 値は実際には FormCollection にあります。
  3. モックデータが動く!ここで何かを台無しにしているに違いないことはわかっています。
  4. デバッガーを使用して値を確認します。
4

1 に答える 1

1

私はすべての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つずつ調べて、各ステップの後にテストすることをお勧めします...

  1. 進行状況を保存し、VS と開発サーバーを再起動します
  2. 値が実際にフォーム データにあることを確認してください。何かが邪魔をしている可能性があります。
  3. 私がしたように、いくつかのゴミデータをモックアップします。(問題がEFと関係があるかどうかを確認しています)
  4. Proxy が更新されていないことをどのように特定していますか? デバッガー、ページなどで?
  5. 上記のすべての質問に対する回答で質問を編集します。
于 2011-07-29T03:01:51.323 に答える