2012-02-24 12 views
2

ViewModelプロパティを部分的なビューに渡そうとしていますが、次のエラーが発生しました: "モデルアイテムが '<> f__AnonymousType2`1 [ DomaniOnline.Models.DomaniData.TempRates] 'が必要ですが、この辞書には' DomaniOnline.Models.DomaniData.TempRates 'のモデルアイテムが必要です。モデルとしてViewModelプロパティを持つMVC3の部分ビュー

VMプロパティを匿名型にするにはどうすればよいですか?

ビュー:

@model DomaniOnline.Models.ViewModels.CompareRatesViewModel 

@{ 
ViewBag.Title = "Rate Comparison"; 
} 

<h2>Compare Rates</h2> 

<table> 
<tr> 
    <td>@Html.DisplayTextFor(m=>m.TempRate1.CarrierName)</td> 
    <td>@Html.DisplayTextFor(m=>m.TempRate2.CarrierName)</td> 
    <td>@Html.DisplayTextFor(m=>m.TempRate3.CarrierName)</td> 
    <td>@Html.DisplayTextFor(m=>m.TempRate4.CarrierName)</td> 
</tr> 
<tr> 
    <td>@Html.Partial("_TempRatesPartial", new { tempRate = Model.TempRate1 })</td> 
    <td>@Html.Partial("_TempRatesPartial", new { tempRate = Model.TempRate2 })</td> 
    <td>@Html.Partial("_TempRatesPartial", new { tempRate = Model.TempRate3 })</td> 
    <td>@Html.Partial("_TempRatesPartial", new { tempRate = Model.TempRate4 })</td> 
</tr> 
</table> 

部分図:

@model DomaniOnline.Models.DomaniData.TempRates 

<fieldset> 
    <legend>TempRates</legend> 

    <div class="display-label">Carrier Name</div> 
    <div class="display-field"> 
     @Html.DisplayFor(model => model.CarrierName) 
    </div> 
.... 
</fieldset> 

とのViewModel:

public class CompareRatesViewModel 
{ 
    public TempRates TempRate1 { get; set; } 
    public TempRates TempRate2 { get; set; } 
    public TempRates TempRate3 { get; set; } 
    public TempRates TempRate4 { get; set; } 
    public TempRates TempRate5 { get; set; } 

    public CompareRatesViewModel(IEnumerable<TempRates> TempRateList) 
    { 
     this.TempRate1 = TempRateList[0]; 
     this.TempRate2 = TempRateList[1]; 
     this.TempRate3 = TempRateList[2]; 
     this.TempRate4 = TempRateList[3]; 
     this.TempRate5 = TempRateList[4]; 
    } 

} 

答えて

1

あなたはモデルの型として、あなたの匿名型をキャストする必要があります部分ビュー:

@Html.Partial("_TempRatesPartial", (DomaniOnline.Models.DomaniData.TempRates)Model.TempRate1) 
2

匿名型を使用するのではなく、オブジェクトを直接渡すだけではどうですか? あなたのpartialはTempRatesを受け取り、あなたのTempRate1はTempRateタイプですので、キャストせずにこれを行うことができます。

<td>@Html.Partial("_TempRatesPartial", Model.TempRate1)</td> 
関連する問題