2015-04-16 3 views
0

Я новичок в MVC.Net и razorviews. У меня есть модель, которая содержит список карт. Я хочу показать этот список в раскрывающемся списке внутри моего представления. Но я не позволю. Из примера, я нашел этот код и сделал попытку:MVC razor view dropboxbox с элементами модели

класса, что список состоит из:

public class CardType 
{ 
    public CardType(string cardTypeName) 
    { 
     this.CardTypeName = cardTypeName; 
    } 

    public string CardTypeName { get; set; } 
} 

Модель:

public class MyCardsViewModel 
{ 
    public IEnumerable<PaymentCard> PaymentCards { get; set; } 
    public AddPaymentcard PaymentCardInformation { get; set; } 
} 

public class AddPaymentcard 
{ 
    public string CardTypeName { get; set; } 

    public IEnumerable<SelectListItem> CardTypeList 
    { 
     get 
     { 
     return _cardTypes.Select(x => new SelectListItem {Value = x.CardTypeName, Text = x.CardTypeName}).ToList(); 
     } 
    } 

    public List<CardType> _cardTypes; 
} 

Контроллер-методы:

// GET: /MyCards/ 
    public ActionResult Index() 
    { 
     string userId = User.Identity.GetUserId(); 
     MyCardsViewModel viewModel = new MyCardsViewModel(); 
     var user = _userRepository.GetUser(userId); 

     viewModel.PaymentCards = user.PaymentCards; //Don't mind this, it is something else :) 
     var cardTypeList = _cardTypeRepository.GetCardTypes(); 

     viewModel.PaymentCardInformation=new AddPaymentcard 
     { 
      _cardTypes = cardTypeList 
     }; 

     return View(viewModel); 
    } 

//Get: MyCards/AddPaymentcard 
    public ActionResult AddPaymentcard() 
    { 
     return View(); 
    } 

Просмотров:

Index-вид, который принимает в MyCardsViewModel и добавляет частичный вид AddPaymentcard.cshtml:

@model Kvittering.TaxiFinans.Web.Models.MyCardsViewModel 
(...) 
    @Html.Partial("~/Views/MyCards/AddPaymentcard.cshtml", @Model.PaymentCardInformation); 

AddPaymentcard ракурса:

@model Kvittering.TaxiFinans.Web.Models.AddPaymentcard 

(...) 
<div class="form-group"> 
    @Html.LabelFor(m => m.CardTypeName, new { @class = "control-label col-md-2"}) 
    <div class="col-md-offset-2 col-md-8"> 
     @Html.DropDownListFor(m => m.CardTypeName, @Model.CardTypeList) 
    </div> 
    </div> 

Может кто-нибудь помочь мне с этим? :/

+0

Он должен был бы быть 'получить {возвратить новый SelectList (_cardTypes, "CardTypeName", "CardTypeName"); } '- вам нужно указать свойства' Value' и 'Text' –

+0

И вы можете также сделать подпись' public SelectList CardTypeList {..} ', но в любом случае свойство должно быть' public SelectList CardTypeList {get ; задавать; } 'и контроллер должен нести ответственность за установку значения (' List _cardTypes; 'не требуется) –

ответ

1

Решение может быть, если вы Select a new SelectListItem, таким образом вы прекратите использование жестко закодированных строк, и вы будете уверены, что получите то, что хотите.

public class AddPaymentcard 
{ 
    public string CardTypeName { get; set; } 

    public IEnumerable<SelectListItem> CardTypeList 
    { 
     get { return _cardTypes.Select(x => new SelectListItem { Value = x.CardTypeName, Text = x.CardTypeName }); } 
    } 

    public List<CardType> _cardTypes; 
} 

Вы должны исправить эту строку, если ваша модель представления является тип MyCardsViewModel

@Html.DropDownListFor(m => m.PaymentCardInformation.CardTypeName, @Model.PaymentCardInformation.CardTypeList) 
+0

Не нужно, и это немного бессмысленно добавлять' .ToList() ', когда свойство' IEnumerable' –

+0

@StephenMuecke вы правы в '.ToList()' я делал это по привычке. Я думаю, что это лучше, чем использование 'SelectList', потому что у вас нет ** hardcoded string **, и вы уверены, что получите то, что хотите, коллекции' SelectListItem'. – adricadar

+0

Спасибо, что, казалось, удалили ошибки сборки. Но при запуске я получаю nullpointer в представлении в строке «@ Html.DropDownListFor (m => m.CardTypeName, Model.CardTypeList)» с errormessage: Исключение типа «Исключение System.NullReferenceException» произошло в App_Web_qzig3nv5.dll, но не обрабатывался в коде пользователя Дополнительная информация: Ссылка на объект не установлена ​​в экземпляр объекта. – TorK

Смежные вопросы