具有ViewModel属性的MVC3局部视图作为模型

时间:2012-02-24 19:30:23

标签: asp.net-mvc-3

我正在尝试将ViewModel属性传递给局部视图,但是收到以下错误: “传递到字典中的模型项的类型为'<> f__AnonymousType2`1 [DomaniOnline.Models.DomaniData.TempRates]',但此字典需要类型为'DomaniOnline.Models.DomaniData.TempRates'的模型项。”

如何传递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];
    }

 }

2 个答案:

答案 0 :(得分:2)

为什么不直接传入对象而不是使用匿名类型? 你的部分采用TempRates而你的TempRate1属于TempRate类型,所以你应该能够在不进行强制转换的情况下执行此操作。

<td>@Html.Partial("_TempRatesPartial", Model.TempRate1)</td>

答案 1 :(得分:1)

您需要将匿名类型转换为部分视图模型的类型:

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