1

Razor ビューを使用して、Telerik の MVC Grid を使用して MVC3 のレコードを編集しています。

次のコードを使用して、コントローラーで編集を呼び出します。

public ActionResult _CategoriesUpdate(int id)
    {
        WR_TakeAway_Menu_Categories category = db.WR_TakeAway_Menu_Categories.Where(c => c.ID == id).Single();
         TryUpdateModel(category);            
        db.ApplyCurrentValues(category.EntityKey.EntitySetName, category);

        db.ObjectStateManager.ChangeObjectState(category, EntityState.Modified);
        db.SaveChanges();

これによりサーバー内のレコードが更新されますが、「カテゴリ」のすべてのプロパティを更新できなかったため、グリッドは編集モードのままになります。

TryUpdateModel を UpdateModel に変更すると、「タイプ WR_TakeAway_Menu_Categories のモデルを更新できませんでした」というエラーがスローされます。

これを行うためのより良い方法、または TryUpdateModel が true を返してグリッドが表示モードに戻るようにする方法はありますか?

4

1 に答える 1

3

WR_TakeAway_Menu_Categories クラスが表示されていないので、WR_TakeAway_Menu_Categories クラスのプロパティとして他のクラスがいくつかあると仮定します。

その場合は、カスタム オブジェクトを TryUpdateModel メソッドから除外し、事前に手動で設定する必要があります。

例えば:

db.Entry(category).Reference(c => c.CreatedByUser).CurrentValue = CreatedByUser;
db.Entry(category).Reference(c => c.LastUpdateByUser).CurrentValue = LastUpdateByUser;

これにより、「カスタム オブジェクト」変数が最新の値に設定されます。このようにせずにプロパティを明示的に設定すると、データベース レコードが常に更新されるとは限らない場合があることに気付きました。

カスタム プロパティを手動で更新した後、手動で設定したプロパティを除外して、TryUpdateModel を呼び出します。

TryUpdateModel<WR_TakeAway_Menu_Categories>(category, null, null, new[] { "CreatedByUser", "LastUpdateByUser" });
于 2011-07-13T06:28:53.790 に答える