2013-09-17 2 views
1

Я знаю, что было глупо задавать этот вопрос, но я не могу понять это, и мне нужна ваша помощь.using DropdownlistFor helper для списка имен

Прежде всего, я новичок в MVC. В моем проекте я использую dropdownlistFor helper для отображения списка имен, доступных для определенного идентификатора. Я сделал это, и он отображает имена для id.

Теперь при отправке формы я получаю Null Reference Exception для свойства, используемого в выпадающем списке.

Это мое свойство в модели, которая представляет собой список имен.

В моем контроллере в [HttpGet] я сделал это, которое вызывает функцию и возвращает список имен для этого идентификатора.

Теперь список имен игнорируется при загрузке формы. И мое мнение такое, как

Когда я отправляю форму, я получаю исключение ссылочной ссылки, потому что в новом SelectList (Model.InterviewerName) модель имеет значение NULL.

Есть все равно, чтобы вытащить меня из этой проблемы.

+0

Публикация нескольких строк кода в httpget, httppost и для метода context.GetInterviewerNameforEntityId() может помочь выяснить! – AthibaN

+0

Так что 'exeleratemodel.InterviewerName' не является нулевым в контроллере, то вы отправляете его в представление и в представлении оно становится нулевым? Можете ли вы показать полное действие контроллера и соответствующий код представления? – cheesemacfly

+0

Отредактировал мой код в вопросе – user2619542

ответ

1

Я думаю, вы должны обновить свои ViewModel как этот

public class InterviewViewModel 
{ 
    public List<SelectListItem> Interviewers { set;get;} 
    public int SelectedInterviewerID { set;get;} 
    //Other properties relevant to the view as needed 
} 

И в вашем GET действии установить свойство Interviewers коллекции

public ActionResult Interview() 
{ 
    var vm=new InterviewViewModel(); 
    vm.Interviewers =GetInterViewrsFromSomewhere(); 
    return View(vm); 
} 
public List<SelectListItem> GetInterViewrsFromSomewhere() 
{ 
    var list=new List<SelectListItem>(); 
    //Items hard coded for demo. you can read from your db and fill here 
    list.Add(new SelectListItem { Value="1", Text="AA"}); 
    list.Add(new SelectListItem { Value="2", Text="BB"}); 
    return list; 
} 

А на ваш взгляд, который сильно типизированных к InterviewViewModel

@model InterviewViewModel 
@using(Html.Beginform()) 
{ 
<p>Select interviewer : 
@Html.DropdownlistFor(x=>x.SelectedInterviewerID,Model.Interviewers,"Select") 
<input type="submit" /> 
} 

Итак, когда форма отправлена, выбранный intervi Эверс идентификатор будет доступен в SelectedInterviewerID собственности

[HttpPost] 
public ActionResult Interview(InterviewViewModel model) 
{ 
    if(ModelState.IsValid) 
    { 
    //check for model.SelectedIntervieweID value 
    //to do :Save and redirect 
    } 
    //Reload the dropdown data again before returning to view 
    vm.Interviewers=GetInterViewrsFromSomewhere(); 
    return View(vm); 
} 

В методе HttpPost действия, если вы возвращаете ViewModel вернуться к просмотру, вам необходимо пополнить содержание выпадающего , потому что HTTP является лицом без гражданства и он не держать выпадающее содержание между запросами (WebForms делает это использованияКонтактной ViewState и здесь, в MVC мы не имеем, что)

0

Я думаю, что я заметил эту проблему, вам нужно сделать следующие две вещей, чтобы решить,

1) изменение свойство модели public IList<string> InterviewerName - public string InterviewerName

2) Используйте ViewBag, чтобы отобразить значения selectlist в представлении.

Сообщите мне, если это поможет.

+0

Я решил, что ошибка, которую я совершил, возвращает пустой вид вместо представления с объектом модели – user2619542

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