2015-05-15 58 views
0

我知道我不应该使用Viewbag,我应该建立一个菜单使用Html.DropDowlListFor(),这样我可以添加属性绑定到模型的成员,但是,这将涉及相当广泛的代码改写....需要验证的HTML下拉列表与数据从Viewbag

我有一个菜单定制控制器:

* .ASCX

<%: Html.DropDownList("CityIDs", new SelectList(ViewBag.cities, "Id", "Name"), "--Select--", new { style = "width:200px" })%> 
<%= Html.ValidationMessage("CityIDs") %> 

列表填充就好了,我可以默认为Ť op项目"--Select--" 这个问题是我想验证错误发生在任何不是从视图袋....我怎么能做到这一点?

回答

1

验证下拉列表只确保东西已过帐。如果你想确保被张贴的价值实际上是一组的“允许”的一个值,那么你就必须这样做手工在您的文章操作:

var cityIds = db.Cities.Select(m => m.Id); 
if (!cityIds.Contains(model.CityIDs)) 
{ 
    ModelState.AddModelError("CityIDs", "You must select one of the available choices."); 
} 

if (ModelState.IsValid) 
{ 
    ... 

两件事情:

  1. 请注意,我直接从数据库中提取城市ID(当然,这里需要的实际代码取决于您的具体实现)。但重要的是,ViewBag只能存活一个请求,所以在发布后你不能在ViewBag中查找它们。

  2. 尽管复数名称CityIDs,但使用DropDownList助手确保只存在一个选定的值。如果这实际上应该是多重选择,那么您需要使用ListBox代替,并在此处更新此条件以考虑检查多个值。

+0

CityIDs只是一个选择..好吧我会尝试这些想法...谢谢 – fifamaniac04

0

填充顶部的项目使用文本=“ - 选择 - ”和值=“” 这将张贴CityIDs空白值和的ModelState导致错误。