これは私の最初の大規模なMVCアプリケーションであるため、MVCでこれが可能か、正確には何が標準的なものかを知る必要があります。ViewModelを使用してMVCフォームを設定しますが、ポストバックのビューモデルのオブジェクトにバインドします。これは可能ですか?
だから私は持っている
public class Tier2IssueFormViewModel
{
public Tier2IssueDTO Tier2Issue { get; set; }
public IEnumerable<SelectListItem> VersionList { get; set; }
public IEnumerable<SelectListItem> BugList { get; set; }
public IEnumerable<SelectListItem> IssueStatusList { get; set; }
}
それから私は、ユーザーが編集すると、そのフォームのページに、私は私がのviewmodelに持ってる必要なすべての必要なデータをプルアップすることができるようにしたいフォーム、私は、
@Html.TextBoxFor(m => m.Tier2Issue.Tier2Notes, new { @class = "form-control"})
@Html.DropDownListFor(m => m.Tier2Issue.FishbowlVersion, Model.VersionList, "Select Application Version")
@Html.HiddenFor(m => m.Tier2Issue.ID)
が、私は私のモデルにバインドするため、次のシグネチャを持つ、このアクションに戻って投稿したい、のようなものを使用して、ユーザーからのフォームデータを収集し終わったら
[HttpPost]
[Route("Issues/{id}/Edit")]
public ActionResult EditIssue(Tier2IssueDTO model)
{
...
// Update DB with the DTO model
...
}
これまでのところ、何も実際にこのオブジェクトにバインドされていません。私は、モデルのバインダーが2つのペアを作るのに十分にスマートかもしれないと思ったが、私はこの論理が間違っていると推測している。だから私は現在、これを使用して回避策をやっている、
[HttpPost]
[Route("Issues/{id}/Edit")]
public ActionResult EditIssue(Tier2IssueFormViewModel model)
{
...
// Get Tier2IssueDTO values from viewmodel
// Update DB with the DTO model
...
}
私はそれが動作を意味するが、あなたがビューモデルにバインドをモデル化するだろうと私には奇妙に思えます。この標準的なプラクティスですか、またはビューモデルに含まれるオブジェクトに直接バインドする方法はありますか?
動作させる必要がありますモデルは 'Tier2IssueFormViewModel'であり、' HtmlHelper'メソッドは 'Tier2IssueDTO'ではなくそのモデルに基づいてフォームコントロールを生成しています(' name'属性を見てください)。あなたは 'BindAttribute'の' Prefix'プロパティを使用することができますが、あなたはこれを正しく実行しません。ビューモデルは、特にデータを編集するときに、データモデルを含むべきではありません。 –
@StephenMueckeビューモデルにデータモデルを持たない場合は、編集するオブジェクトのデータをどのように表示するのですか?オブジェクトには既に値があり、その値を表示して変更する方法です。代替手段は何ですか? – tokyo0709
ビューモデルには、編集するデータモデルのプロパティ(データモデル自体ではない)と選択リストなどのプロパティを含める必要があります - [MVCでViewModelとは何ですか](http://stackoverflow.com/questions/11064316/what -is-viewmodel-in-mvc) –