【发布时间】:2018-06-02 04:49:14
【问题描述】:
为通过 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 所说的并摆脱了验证。
【问题讨论】:
-
尝试使用
@Html.DropDownListFor()而不是@Html.DropDownList()这将允许您绑定到您的模型属性。或者更正传递给@Html.DropDownList()的第一个参数以匹配模型中的有效属性(又名:“StateName”)。参考:stackoverflow.com/a/8223513/3384612 -
使用
new SelectList(...)从第一个创建另一个相同的IEnumerable<SelectListItem>是没有意义的! -
并且由于
States是IEnumerable<SelectListItem>,那么拥有@Html.ValidationMessageFor(m => m.States)是没有意义的(你不能对SelectList 应用验证),因为你的@Html.LabelFor(m => m.States)也是如此,因为你没有表单控件对于States
标签: linq tsql asp.net-mvc-5