использование DropdownlistFor helper для списка имен

c# asp.net-mvc nullreferenceexception

112 просмотра

2 ответа

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

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

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

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

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

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

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

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

Автор: user2619542 Источник Размещён: 12.11.2019 09:45

Ответы (2)


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" />
}

Поэтому, когда форма будет опубликована, идентификатор выбранного интервьюера будет доступен в 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, если вы возвращаете модель представления обратно в представление, вам необходимо повторно заполнить раскрывающееся содержимое, поскольку HTTP не сохраняет состояния и не будет сохранять раскрывающееся содержимое между запросами (Webforms делает это с использованием Viewstate, а здесь, в MVC, мы не делаем есть что)

Автор: Shyju Размещён: 17.09.2013 02:44

0 плюса

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

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

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

Дайте мне знать, если это поможет.

Автор: AthibaN Размещён: 17.09.2013 02:46
Вопросы из категории :
32x32