从下拉列表中获取值mvc 4

时间:2013-03-19 12:07:33

标签: c# asp.net-mvc-3 razor asp.net-mvc-4

我来到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

这会导致问题吗?

2 个答案:

答案 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)

您可以访问控制器中的下拉列表选定值。我希望它对你有所帮助。