Частичное представление MVC3 со свойством ViewModel в качестве модели - PullRequest
2 голосов
/ 24 февраля 2012

Я пытаюсь передать свойство 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>

И модель представления:

 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 ]

2 голосов
/ 25 февраля 2012

Почему бы просто не передать объект напрямую, а не использовать анонимный тип?Ваш частичный берет TempRates, а ваш TempRate1 имеет тип TempRate, поэтому вы должны иметь возможность делать это без приведения.

<td>@Html.Partial("_TempRatesPartial", Model.TempRate1)</td>
1 голос
/ 24 февраля 2012

Вы должны привести свой анонимный тип к типу, который является моделью вашего частичного представления:

@Html.Partial("_TempRatesPartial", (DomaniOnline.Models.DomaniData.TempRates)Model.TempRate1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...