Привязка модели ASP.NET MVC3 с использованием IEnumerable (невозможно определить тип из) - PullRequest
0 голосов
/ 29 марта 2011

У меня есть класс модели (отредактировано для краткости)

Класс модели

public class GridModel
{
   public string ItemNumber { get; set; }
   public int OnHandQty     { get; set; }
}
public class Shipment
{
  public string shipTrackingNo               {get; set;}
  public IEnumerable<GridModel> ItemsShipped { get; set;}
{

cshtml page

@model Namespc.Models.Shipment

<link href="../../Content/CSS/Grid/Grid.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/ECommerce.Grid.js" type="text/javascript"></script>

<div id="_shipmentDetailGrid">
    <table class="TableStyle">
     <tr class="GridRowStyle">
       <td width="130px" ></td>
         @foreach (var Item in Model.ItemsShipped)
           {
             <td width="70px" align="center">
                   @html.LabelFor(item.OnHandQty) <-- Cannot infer type from usage
             </td>
           }
       </tr>

Я хочу иметь возможность связывать item.OnHandQty, который находится в коллекции IEnumerable.Как у вас может быть класс Model, а также коллекция IEnumerable пользовательского класса (или, скорее, ваш собственный класс)?

Ответы [ 2 ]

2 голосов
/ 29 марта 2011

Ну, какой тип предметов хранится в ItemsShipped? Вам следует использовать общую версию IEnumerable, чтобы указать, какие типы хранятся в ней.

Если ваш класс был назван Item, вы бы объявили его IEnumerable<Item>, тогда при итерации во время выполнения, т.е. @foreach (var Item in Model.ItemsShipped), тип Item будет строго типизирован вместо простого object .

0 голосов
/ 29 марта 2011

Вместо этого:

@foreach (var Item in Model.ItemsShipped)
           {
             <td width="70px" align="center">
                   @html.LabelFor(item.OnHandQty) <-- Cannot infer type from usage
             </td>
           }

Сделайте это:

@Html.DisplayFor(model => model.ItemsShipped)

Затем создайте пользовательский шаблон отображения (помещенный в Views/Shared/DisplayTemplates/GridModel.cshtml):

@model Namespc.Models.GridModel
<td width="70px" align="center">
   @html.LabelFor(model => model.OnHandQty)
</td>

У меня такое ощущение, что это не работает, потому что вы не передаете выражение методу LabelFor.

Вышеприведенное намного лучше и надежнее, чем явный цикл for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...