1

我来到 Stackoverflow 的智者委员会,因为我需要一些魔法(似乎)来解决我的代码的一个小问题。

我正在尝试从我的下拉列表中接收数据,我尝试了很多咒语……但我觉得我的力量太弱了。我尝试从下拉列表中检索数据导致我的计算机有点恶心。所以我来找你们,希望你们的智慧(甚至是一个词吗?)可以帮助我想出正确的代码来解决这个问题。

这是我的代码的样子

模型(对于模型来说不是很漂亮):

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

这会导致问题吗?

4

2 回答 2

1

模型:

public SelectList List{ get; set; }

控制器:

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)

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

于 2014-01-30T14:37:31.277 回答
1

在模型中创建一个属性来保存下拉值,例如:

public int EstateAgentID {get;set;}

并将您的 DropDownList 更改为 DropDownListFor。喜欢,

@Html.DropDownListFor(model=>model.EstateAgentID , Model.LettingList)

在您的让选择方法中:

var agent = viewModel.EstateAgentID ;

编辑::您还可以使用下拉列表的名称获取下拉值。为此,请执行以下操作:

将您的方法更改为

public ActionResult lettingselect(DropList viewModel,string product)//product is the name of your dropdown

这里产品是您选择的项目

于 2013-03-19T12:14:04.667 回答