我已经来到智慧巫师理事会这里在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
但正如代码中所述,这返回一个空引用异常。
明智的巫师,花点时间与我分享你的智慧,以便如何最好地解决这个问题。
非常感谢。 学徒向导。
编辑:这是实际的错误:
Object reference not set to an instance of an object.
,这是在视图
@model HouseGaurd.Models.DropList
难道这是导致问题的模式?
问题是您要回发一个名为'product'的值,所以您的模型上的'LettingList'属性不可能被模型绑定器实例化。如果您只需要获取选定的值,请按照您提供的答案中的建议进行操作。 如果您试图实例化您的LettingList,则需要重新构建它。 – 2013-03-19 12:20:11