2017-03-13 6 views
0

私はMVCサイトを継承し、2ページを1つにまとめるように求められました。どちらのビューにも独自のビューモデルがあるので、2つのVMを一緒にプッシュする代わりに、パーシャルビューを使用してこの例ではClock_Detailというビュー内のクロックグループを表示できると考えました。しかし、GroupIdにClock Groupのデータを入力させる必要があります。パラメータをMVCパーシャルビューに渡すのに混乱しますか?

私は部分ビューをほとんど使用していないので、これを動作させる方法を混乱させています。 _ClockGroup.cshtmlという名前の新しいビューを作成し、他のページからいくつかの基本コードをコピーして貼り付けて、何か表示できるかどうかを確認しました。

私のClockDetailコントローラに私は以下を追加しました。ここで

public PartialViewResult ClockGroup(int groupId) 
{ 
    ClockGroupViewModel vm = DAL.GetClockGroupDetail(groupId); 
    return PartialView(vm); 
} 

は_ClockGroup.cshtml

@model site.Models.ViewModels.ClockGroupViewModel 

<div class="form-group"> 
    @Html.LabelFor(m => m.GroupId, htmlAttributes: new { @class = "control-label col-md-2" }) 
    @Html.EditorFor(m => m.GroupId, new { htmlAttributes = new { @class = "form-control", disabled = "disabled", @readonly = "readonly" } }) 
</div> 
<div class="form-group"> 
    @Html.LabelFor(m => m.GroupName, htmlAttributes: new { @class = "control-label col-md-2" }) 
    @Html.EditorFor(m => m.GroupName, new { htmlAttributes = new { @class = "form-control", autofocus = "autofocus" } }) 
    @Html.ValidationMessageFor(m => m.GroupName, "", new { @class = "text-danger" }) 
</div> 

これはclock_detail.cshtmlビューからです。次のモデルを使用して、このビューに部分を追加しました。もちろん

@model site.Models.ViewModels.ClockDetailViewModel 

@Html.Partial("_ClockGroup") 

私はモデルが辞書の種類“site.Models.ViewModels.ClockDetailViewModel”を通過したが、辞書は時間“site.Models.ViewModels.ClockGroupViewModel"のモデルアイテムを必要とするというエラーが表示されます。

2つのViewModelを組み合わせて、単一のViewModelだけを使用する必要がありますか?

+0

あなたのパーシャルでコードを書いているところでは、[テンプレート代わりに]を使うべきでしょう(http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor- templates.html)。テンプレートは読みやすく、呼び出すための規約がより簡単に診断できるため、テンプレートが便利です。パーシャルを使用することはまれです。 –

+0

テンプレートを見ていきます。私は、コードの保守性を助けるならば、何かを試すことにいつも開いています。 – Caverman

答えて

1

あなたは2番目のパラメータとしてオブジェクトを指定しない:

@Html.Partial("_ClockGroup") 

それは自動的にClockDetailViewModel

あなたの部分的な型である現在のモデルを渡すには、希望ClockGroupViewModel

修正を入力する必要がClockDetailViewModelオブジェクトのプロパティで部分的に通話を呼び出す場合は、

@Html.Partial("_ClockGroup", Model.ClockGroupViewModelProperty) 

クラスClockDetailViewModelのクラスにClockGroupViewModelプロパティがない場合は、そのプロパティをViewModelに追加してデータを入力する必要があります。

+0

私はモデルを渡さないと現在のモデルを渡して、それが問題の一部であると考えていました。しかし、私はClockGroupViewModelをどのように部分的に渡すのか分かりませんでした。私のClockDetailViewModelにはClockGroupViewModelプロパティがありません。私はそれを達成するために何をする必要があるかを調べる必要があると思います。ありがとう... – Caverman

+0

私はそれがデータベースのトリップに重複しているように感じていますが、少なくともコードの束を書き直さなくてもうまくいくようです。 – Caverman

+0

...私はここでビューモデルについて話していると思いましたか?ビューモデルは、ビューが依存するデータの単なるコンテナです。ビューモデルは、データベースモデルの表現が1対1になることはめったにありません。 – maccettura

関連する問題