我来到Stackoverflow的Wise Wizards理事会,因为我需要一些魔法(似乎)修复我的代码的一个小问题。
我试图从我的下拉列表中接收数据,我尝试了很多法术......但我觉得我的力量太弱了。我尝试从下拉列表中检索数据导致我的计算机有点生病。所以我来找你们,希望你的聪明才智(即使是一句话?)可以帮助我想出正确的代码来解决这个问题。
这是我的代码的样子
模型(模型不是很漂亮):
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
但正如代码中所述,这会返回null引用异常。
Wise Wizards,花一点时间与我分享你如何最好地解决这个问题的智慧。
非常感谢。 学徒向导。
编辑:这是实际错误:
Object reference not set to an instance of an object.
这是视图中的模型
@model HouseGaurd.Models.DropList
这会导致问题吗?
答案 0 :(得分:1)
在模型中创建一个属性以保存下拉值,例如:
public int EstateAgentID {get;set;}
并将您的DropDownList更改为DropDownListFor。像,
@Html.DropDownListFor(model=>model.EstateAgentID , Model.LettingList)
你的lettingselect方法中的执行:
var agent = viewModel.EstateAgentID ;
修改强>: 您还可以使用下拉列表的名称获取下拉值。为此,请执行以下操作:
将您的方法更改为
public ActionResult lettingselect(DropList viewModel,string product)//product is the name of your dropdown
此处产品是您选择的商品
答案 1 :(得分:1)
型号:
public SelectList List{ get; set; }
Conoroller:
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
});
}
ViewData["List"] = listItems;
return View(rlist);
}
查看:
@Html.DropDownList("List", ViewData["List"] as SelectList)
您可以访问控制器中的下拉列表选定值。我希望它对你有所帮助。