DropDownList没有传递任何值

时间:2017-12-19 17:27:26

标签: linq tsql asp.net-mvc-5

为通过linq调用的美国州创建动态下拉菜单。当我选择一个州然后点击提交时,我会走过代码并显示我正在通过null。列表显示应该,任何指导都会有所帮助。

如果您需要更多信息,请告诉我并发布信息。

控制器

 // GET:
    [AllowAnonymous]
    public ActionResult DealerLogin()
    {

        var results = (from a in db1.States
                       where a.CountryID == 221
                       select new SelectListItem { Value = a.StateID.ToString() , Text = a.Name }).ToList();
    }

查看

@using (Html.BeginForm())
    {
@Html.AntiForgeryToken()

 <div class="form-horizontal">

<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="form-group">
        <div class="form-group">
            @Html.LabelFor(model => model.StateId, "States", htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(model => model.StateId, Model.States.Items as List<SelectListItem>, "-- Select --", new { @class = "form-control" })
            </div>
        </div>
    <div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" value="Create" class="btn btn-default" />
    </div>
   </div>
  </div>

}

模型

 public class EditProfile2
  {
    public int StateId { get; set; }
    public SelectList States { get; set; }
   }

已更新

好的,我已经更新了所有内容,所以它几乎与@Fran的答案相匹配,似乎他错过了一些东西,但我得到了它的工作。我还拿了@Stephen Muecke所说的并且摆脱了验证。

1 个答案:

答案 0 :(得分:2)

你似乎想要解决MVC免费提供的所有内置功能。<​​/ p>

试试这个

您可以使用属性来定义所需内容并修改显示名称,而无需实际写入视图。

视图模型:

 public class EditProfile2
 {    
    [Required]
    [DisplayName("State")]
    public int StateId { get; set; }
    public SelectList States {get;set;}
 }

查看:仅包含相关部分

由于我们在模型上使用了属性,因此我们不必在视图中提供文本。我们也可以使用DropDownListFor而不是DropDownList。并且还要在此声明中添加“ - 选择状态 - ”选项

<div class="form-group">
@Html.LabelFor(model => model.StateId, htmlAttributes: new { @class = "control-label col-md-2" })
  <div class="col-md-10">
    @Html.DropDownListFor(model.StateId, Model.States, "-- Select State --", new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.StateId, "", new { @class = "text-danger" })
  </div>
</div>

由于我们之前使用过属性和内置框架元素,因此我们的操作方法可以减少。

控制器操作:

[AllowAnonymous]
public ActionResult DealerLogin()
{
   var results = (from a in db1.States
              where a.CountryID == 221
              select new SelectListItem { Value= a.StateID.ToString(), Text = a.Name }).ToList();


    return View(new EditProfile2 { States = new SelectList(results)});
}