Html.Grid не может найти свойство модели, которое явно там - PullRequest
3 голосов
/ 18 октября 2011

Рассматриваемая сетка представляет собой простой список местоположений, основанный на этой коллекции:

public class Locations : BaseGrid
{
    public string zipCode { get; set;}
    public string city { get; set; }
    public string state { get; set; }
    public string timeZone { get; set;}
    public IPagination<Location> LocationList { get; set; }
}

и это лицо:

[DataContract] // DataContract/DataMember used for JsonSerializer
public class Location
{
    public int ID { get; set; }
    public string Address;
    public string AlternateSupportingLocationNumber;
    public string City;
    public string CompanyName;
    [DataMember]
    public string CTU;
    public string Description;
    public double Distance;
    [DataMember]
    public string LocationNumber;
    public string ManagerName;
    public string PhoneNumber;
    public string State;
    public string SupportingLocationNumber;
    public string TimeZone;
    public string ZipCode;
    public bool IsInPhysicalInventory;
    public bool IsEslOwned;
}

Контроллер, который выглядит так:

    public ActionResult NearestStoreCoverage( Locations locations )
    {
        if ( string.IsNullOrEmpty( locations.SortBy ) )
            locations.SortBy = "Distance";
        var list = _locationService.NearestStoreCoverage( locations, 50, ModelState );
        locations.LocationList = list.AsPagination(locations.Page ?? 1, list.Count);

        //go get locations that are close
        return View( "Details/NearestStoreCoverage", locations );

    }

Получает представление списка Locations в качестве члена LocationList модели Locations и заполняет этот элемент управления:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Locations>" %>
<%@ Import Namespace="Models.Common"%>

<div class="detailSection" style="width:98%">
    <h1>Locations close to Zip Code -- <%=Model.zipCode %></h1>
    <div>
    <%= Html.Grid(Model.LocationList).Columns(column =>
         {
             column.For(x => x.LocationNumber)
                 .Named(Html.SortByLink("Location","LocationNumber"));
             column.For(x => x.Distance.ToString("N2")).Named(
                 Html.SortByLink("Distance", "Distance"));
             column.For(x => x.PhoneNumber.ToFormattedString()).
                 Named(Html.SortByLink("Phone Number",
                                       "PhoneNumber"));
             column.For(x => x.Address).Named(
                 Html.SortByLink("Address", "Address"));
             column.For(x => x.City).Named(
                 Html.SortByLink("City", "City"));
             column.For(x => x.State).Named(
                 Html.SortByLink("State", "State"));
             column.For(x => x.ZipCode).Named(
                 Html.SortByLink("ZipCode", "ZIpCode"));
         })
            .Attributes(style => "width:100%")
            .Attributes(id => "locationClosesttoZipGrid")
            .Empty("There are no locations close to this zipcode") %>
    <%= Html.Pager( Model.LocationList ).Link( page => Html.WritePageLink( page ) )%>
    </div>
</div>

При запуске запускается ошибка времени выполнения

System.ArgumentException was unhandled by user code
  Message=The property Models.Common.Location.LocationNumber could not be found.
  Source=System.Web.Mvc
  InnerException:

(я удалил трассировку стека для клиента, это все равно скучно)

Однако, если вы выполните отладку и посмотрите на модель (это из Html.Grid (Model.LocationList) .Columns), вы можете ясно увидеть, что LocationNumber заполнен:

Взгляд на модель в отладчике http://img839.imageshack.us/img839/6538/34gridresults.png

Думаете, это не может стать незнакомцем? Если я закомментирую ссылку на LocationNumber, отладчик разрешает расстояние и телефонный номер, а затем снова отказывает по адресу (который также явно присутствует).

Я попытался восстановить, и F12ed все соответствующие символы, чтобы убедиться, что они идут туда, где я думаю, они должны идти.

Отладчик не позволит мне взглянуть на x, что является обломом. Есть идеи, что может быть не так или хотя бы как начать искать?

1 Ответ

4 голосов
/ 18 октября 2011

Проблемные свойства объявлены как поля .

По-видимому, сетка может обрабатывать свойства и вызовы методов: те поля, у которых есть вызовы методов, работают.Похоже, поля не работают.

(спасибо Крейгу Штунцу за указание на это)

...