Ошибка NULL REF при заполнении SelectListItem из IEnumerable <T> - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть следующий ViewModel (TripSearchView), который содержит свойство IEnumerable (of AffiliateComponentTypeView), я должен заполнить раскрывающийся список с помощью этой коллекции. Я написал класс расширения, который заполняет SelectListItem из свойства IEnumerable.

public class TripSearchView
{
    public IEnumerable<AffiliateComponentTypeView> ComponentTypes { get; set; } 
    //More fields...
}
public static class DropDownHelper
{
    public static IEnumerable<SelectListItem> ToSelectListItems(
                  this IEnumerable<AffiliateComponentTypeView> componentTypes, int selectedId)
    {
        return
            componentTypes.Select(componentType =>
                      new SelectListItem
                      {
                          Text = componentType.ComponentDesc,
                          Value = componentType.Component_Type
                      });
    }

}

Вот как я это называю в моем aspx, но я получаю ошибку NULL REFERENCE для второго параметра Html.DropDownList. Я удостоверился, что IEnumerable<AffiliateComponentTypeView> ComponentTypes правильно заполнен значениями, и логика для заполнения SelectListItem работает правильно. Почему я получаю ошибку NULL Ref? Чего мне не хватает?

<%= Html.DropDownList(Model.TripSearch.ComponentType.ToString(), DropDownHelper.ToSelectListItems(Model.TripSearch.ComponentTypes,0))%>

Я заполняю "ComponentTypes" коллекцией в действии моего контроллера перед вызовом View.

public ActionResult Index()
{
    SearchView SearchView = new SearchView();
    TripSearchView TripSearchView = new TripSearchView();
    TripSearchView.ComponentTypes = _referenceDataService.AffiliateComponentTypes(base.GetAffiliateID());
    SearchView.TripSearch = TripSearchView;

    ViewData["ComponentTypesList"] = _referenceDataService.AffiliateComponentTypes(base.GetAffiliateID()).Select(componentType =>
                  new SelectListItem
                  {
                      Text = componentType.ComponentDesc,
                      Value = componentType.Component_Type
                  });

    return View(SearchView);

}

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Ну, я могу придумать три варианта:

  • Model.ComponentTypes равно нулю (вы говорите, что нет, но я должен предположить, что что-то не так, как вы думаете)
  • Один из составляющих элементов в Model.ComponentTypes равен нулю
  • Один из составляющих элементов имеет значение null ComponentDesc или Component_Type

Замечу, что вы не используете параметр selectedId в методе, кстати ... вы хотели? (Вы также не используете тот факт, что у вас есть метод расширения, по некоторым причинам ...)

0 голосов
/ 08 февраля 2011
<%: Html.DropDownList(
Model.ComponentType.ToString(), 
Model.TripSearch.ComponentTypes.ToSelectListItems(0))
%> 

В вашем DropDownHelper

    return componentTypes.Select(
      componentType =>
         new SelectListItem 
            { Text = componentType==null?"empty":ComponentType.ComponentDesc,
              Value = componentType==null?"empty":componentType.Component_Type
            })

Вы уверены, что base.GetAffiliationId не равен нулю?Вы уверены, что сама служба не генерирует исключение нулевого возврата?Помните, что это IEnumerable, поэтому выполнение может быть отложено.

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