Рассматриваемая сетка представляет собой простой список местоположений, основанный на этой коллекции:
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, что является обломом. Есть идеи, что может быть не так или хотя бы как начать искать?