MVC 3下拉列表已填充但无法获得用户的选择

时间:2013-12-31 02:05:12

标签: asp.net-mvc-3 razor selecteditem dropdownlistfor

我是MVC 3的新手。我想要3个下拉列表。用户从每个列表中选择一个项目,然后根据匹配检索选择。对于我的问题,我只是使用2个下拉列表和代码片段。我已经填充了所有3个下拉列表 - 前两个从Linq到Sql,第三个是使用Razor(A-Z)创建的选项列表。 我错过了将所选内容的值设置为MemberSetup.SelectedProgramID和MemberSetup.SelectedOrganizationID的步骤。我想分别存储在MemberSetup.SelectedProgramName和MemberSetup.SelectedOrganizationName中的文本。我想如果我可以将选定的ID放入模型中,我可以通过ActionLink传递它们而不处理@Html.Hidden变量。但是,无论选择什么,模型SelectedProgramID和SelectedOrganizationID都为零(对于程序ID,预期为1,2,3或4,对于组织ID,预期为1,2,5或6)。 任何帮助/更正将不胜感激。 型号:

{
    public int SelectedProgramID { get; set; }
    public string SelectedProgramName { 
        get { return this._myProgramName; }
        set { this._myProgramName = value; }
    }
    public IEnumerable<SelectListItem> ProgramList { get; set; }
    public int SelectedOrganizationID { get; set; }
    public string SelectedOrganizationName
    {
        get { return this._myOrganizationName; }
        set { this._myOrganizationName = value; }
    }
    public IEnumerable<SelectListItem> OrganizationList { get; set; }
}

控制器:

{
var db = new STARDataContext();
MemberSetup  setupModel = new MemberSetup();
setupModel.ProgramList =  db.ProgramAlls.ToList()
    .Select(p => new SelectListItem
    {
        Value = p.ProgramID.ToString(),
        Text =  p.ProgramName.ToString()
    });

setupModel.OrganizationList = db.AreaAlls.ToList()
    .Select(p => new SelectListItem
    {
        Value = p.AreaID.ToString(),
        Text = p.AreaName.ToString()
    });
return View(setupModel);
}

查看:

{
@using ( Html.BeginForm() ) {
@Html.DropDownListFor(model => model.SelectedProgramID, Model.ProgramList)
@Html.DropDownListFor(model => model.SelectedOrganizationID, Model.OrganizationList, "Please select Organization", new { @class = "DropDownList" } )
@Html.Hidden("SelectedProgramID", Model.SelectedProgramID)
@Html.Hidden("SelectedProgramName", Model.SelectedProgramName)
@Html.Hidden("SelectedOrganizationID", Model.SelectedOrganizationID)
@Html.Hidden("SelectedOrganizationName", Model.SelectedOrganizationName)
@Html.ActionLink("Get Members", "Select", new {programID=Model.SelectedProgramID,orgID=Model.SelectedOrganizationID })
}
}

2 个答案:

答案 0 :(得分:2)

使用hiddenFor而不是hidden,因此您的语法应该如下所示

@ Html.HiddenFor(A =&GT; a.SelectedProgramName)

由于您已定义SelectedProgramID和SelectedOrganizationID,因此您无需为其使用隐藏字段。要构建下拉列表,您应该执行类似这样的操作

Html.DropDownListFor(X =&GT; x.ID,         新的SelectList(Model.Products,“ID”,“Sku”,Model.ID),“select”)

供参考:Use Html.DropDownListFor to get a selected value

答案 1 :(得分:0)

上述类,控制器和视图对于显示下拉列表是正确的。这就是为什么我感到困惑。

但是,我在Get部分中有SelectMember。 [HttpPost]和SelectMember可以看到所选内容。