すべてのフィールドがロードされていない厳密に型指定されたビューにデータを保存するための最良の方法
-
18-09-2019 - |
質問
のは、私は「のMyData」と呼ばれるテーブルに強く型付けされている編集ビューがあるとしましょう。ビューはテーブルから、いくつかの異なるフィールドを持つ複数のタブ、それぞれを有しています。パフォーマンスのためにタブが表示されている場合、データはロードされているので、あなただけのタブ1上のフィールドを編集して、フォームを送信した場合、タブ2用のデータがロードされません。
私はに実行している問題は、提出の上にあります。私は、データベース内の既存のレコードを見つけることの典型的なルーチンを実行し、渡された値を更新しています:
<AcceptVerbs(HttpVerbs.Post)> _
Function Edit(ByVal data As MyData) As ActionResult
Using dc = New MyDataContext
Dim orig = dc.MyDatas.Single(Function(x) x.id = data.id)
orig.name = data.name
orig.desc = data.desc
...
SubmitChanges()
End Using
Return View(orig)
End Function
しかし、この方法では、タブがロードされたかわからないので、上の「DESC」とタブがロードされていない場合、このメソッドは、ユーザーが「DESC」フィールドを空白にし、データベースにNULL送信考えています。
どのように私はこれを構築することができる唯一のロードフィールドがデータベースに送信され、およびアンフィールドは無視されるように?
解決
あなたはUpdateModel(orig)
を使用していない何らかの理由はありますか?
、これはあなたのための世話をすることでしょう。デフォルトモデルの結合挙動がないフォームの値を対応しているプロパティを無視することである。
あなたは、このを見てみたいことがありポストに、そしてそこにリンク先の記事、結合モデルについての詳細を学ぶため。
他のヒント
私はちょうどそのタブ上のフィールドを更新し、各タブに個別のアクションメソッドを持つことをお勧めします。各タブのフォームは、単に適切な行動に提出する。
たぶんのViewModelパターンは、ここであなたを助けることができます:
public class Tab1
{
public string pproperty1 { get; set; }
public string pproperty2 { get; set; }
}
public class Tab2
{
public string pproperty3 { get; set; }
public string pproperty4 { get; set; }
}
public class Tab3
{
public string pproperty5 { get; set; }
public string pproperty6 { get; set; }
}
public class ViewModels
{
public Tab1 TAB1 { get; set; }
public Tab2 TAB2 { get; set; }
public Tab3 TAB3 { get; set; }
}
あなたはTab2 == null
場合は掲示される値をバインドするとそれでは、あなたは、このプロパティはロードされませんどちらもユーザーによって変更されなかったことを知っています。
PD:C#のため申し訳ありませんが、時間が、私はコード化されたVB見られた。
。