Я пришел в Совет мудрых волшебников здесь, в Stackoverflow, потому что мне нужно немного волшебства (похоже), чтобы исправить небольшую проблему с моим кодом.Получение значения из выпадающего списка mvc 4
Я пытаюсь получить данные из своего раскрывающегося списка, я пробовал много заклинаний ... Но я чувствую, что мои силы слишком слабы. Мои попытки извлечь данные из выпадающего списка приводят к тому, что мой компьютер немного подбрасывает боль. Итак, я пришел к вам, ребята, с надеждой, что ваша мудрость (это даже слово?) Может помочь мне вызвать правильный код, чтобы победить эту проблему.
Вот что мой код выглядит
модели (не очень красиво для модели):
namespace HouseGaurd.Models
{
public class DropList
{
public SelectList LettingList { get; set; }
}
Контроллер заполняет список: (это HttpGet)
public ActionResult lettingselect()
{
var model = _db.EstateAgents;
DropList rlist = new DropList();
List<SelectListItem> listItems = new List<SelectListItem>();
foreach (var item in model)
{
listItems.Add(new SelectListItem()
{
Value = item.estateAgentID.ToString(),
Text = item.CompanyName
});
}
rlist.LettingList = new SelectList(listItems, "Value", "Text");
return View(rlist);
}
Таким образом, это заполняет список, это модель, которая отображает, пока все работает нормально, заклинание сохраняется:
<h2>Select a </h2>
@using (Html.BeginForm()) {
@Html.DropDownList("product", Model.LettingList)
<p>
<input type="submit" value="select" />
</p>
}
Он заполняет выпадающий список соответствующей информацией!
Теперь, когда я ударил представить, и мы вернемся к контроллеру POST, это когда компьютер начинает подкидывать:
[HttpPost]
public ActionResult lettingselect(DropList viewModel)
{
using (var context = new HouseDB())
{
var agent = viewModel.LettingList.DataTextField; //null reference
var hID = context.HouseListers.Single(d=>d.user == User.Identity.Name);
var let = new Letting();
let.approved = false;
let.user = User.Identity.Name;
let.lettingAgent = agent;
let.houseID = hID.houseID;
let.noProblemsRaised = 0;
context.Lettings.Add(let);
context.SaveChanges();
}
return RedirectToAction("Complete");
}
Я пытаюсь получить выбранное значение назад, я попытался с помощью:
var agent = viewModel.LettingList.DataTextField; //null reference
Но, как указано в коде, это возвращается с нулевым исключением ссылки.
Мудрые волшебники, найдите момент, чтобы поделиться своей мудростью со мной о том, как наилучшим образом подойти к этой проблеме.
Большое спасибо. Мастер-ученик.
EDIT: это фактическая ошибка:
Object reference not set to an instance of an object.
и это модель с точки зрения
@model HouseGaurd.Models.DropList
Может ли это быть причиной проблемы?
Проблема в том, что вы отправляете значение, называемое '' product '', поэтому свойство' LettingList' на вашей модели не может быть создано экземпляром модели. Если вам просто нужно получить выбранное значение, следуйте советам в ответе, который вам дал. Если вы пытаетесь создать экземпляр своего LettingList, вам нужно будет его снова создать. –