验证级联下拉列表
我正在使用MVC.Net。 因为我使用了级联下拉列表。 我想对空白字段进行验证。
视图页面编码是:
选择类别:<%= Html.DropDownList(“使”,ViewData [“使”]作为SelectList,“选择类别”)%>选择子类别:<%= Html.CascadingDropDownList(“Models”,“Make”)%>
控制器上的代码:
public ActionResult AddSubCategoryPage(){
var makeList = new SelectList(entityObj.Category.ToList(), "Category_id", "Category_name");
ViewData["Makes"] = makeList;
// Create Models view data
var modelList = new CascadingSelectList(entityObj.Subcategory1.ToList(), "Category_id", "Subcategory_id", "Subcategory_name");
ViewData["Models"] = modelList;
return View("AddSubCategoryPage");
}
为此我创了一堂课:
public static class JavaScriptExtensions {public static string CascadingDropDownList(this HtmlHelper helper,string name,string associatedDropDownList){var sb = new StringBuilder();
// render select tag
sb.AppendFormat("<select name='{0}' id='{0}'></select>", name);
sb.AppendLine();
// render data array
sb.AppendLine("<script type='text/javascript'>");
var data = (CascadingSelectList)helper.ViewDataContainer.ViewData[name];
var listItems = data.GetListItems();
var colArray = new List<string>();
foreach (var item in listItems)
colArray.Add(String.Format("{{key:'{0}',value:'{1}',text:'{2}'}}", item.Key, item.Value, item.Text));
var jsArray = String.Join(",", colArray.ToArray());
sb.AppendFormat("$get('{0}').allOptions=[{1}];", name, jsArray);
sb.AppendLine();
sb.AppendFormat("$addHandler($get('{0}'), 'change', Function.createCallback(bindDropDownList, $get('{1}')));", associatedDropDownList, name);
sb.AppendLine();
sb.AppendLine("</script>");
return sb.ToString();
}
}
public class CascadingSelectList
{
private IEnumerable _items;
private string _dataKeyField;
private string _dataValueField;
private string _dataTextField;
public CascadingSelectList(IEnumerable items, string dataKeyField, string dataValueField, string dataTextField)
{
_items = items;
_dataKeyField = dataKeyField;
_dataValueField = dataValueField;
_dataTextField = dataTextField;
}
public List<CascadingListItem> GetListItems()
{
var listItems = new List<CascadingListItem>();
foreach (var item in _items)
{
var key = DataBinder.GetPropertyValue(item, _dataKeyField).ToString();
var value = DataBinder.GetPropertyValue(item, _dataValueField).ToString();
var text = DataBinder.GetPropertyValue(item, _dataTextField).ToString();
listItems.Add(new CascadingListItem(key, value, text));
}
return listItems;
}
}
public class CascadingListItem
{
public CascadingListItem(string key, string value, string text)
{
this.Key = key;
this.Value = value;
this.Text = text;
}
public string Key { get; set; }
public string Value { get; set; }
public string Text { get; set; }
}
但是当我运行的时候,它给了我下面的错误:
'/'应用程序中的服务器错误。 参数字典包含CMS.Controllers中方法'System.Web.Mvc.ActionResult AddSubCategoryPage(Int32,System.String,System.String)'的非空类型'System.Int32'的参数'Models'的空项。 .HomeController”。 可选参数必须是引用类型,可为空类型,或者声明为可选参数。 参数名称:参数。
PLZ帮助我。
类型CascadingSelectList的模型为null。 确保对象的实例存在,并且属性没有空值。 此外,我会建议使用JSON来建立你的下拉列表,因为绑定组合数组返回可以创建性能打击并且令人困惑。
<script type="text/javascript">
$(function() {
$.getJSON("/Home/Make/List", function(data) {
var items = "<option>---------------------</option>";
$.each(data, function(i, make) {
items += "<option value='" + make.Value + "'>" + make.Text + "</option>";
});
$("#Make").html(items);
});
$("#Make").change(function() {
$.getJSON("/Home/Models/List/" + $("#Make > option:selected").attr("value"), function(data) {
var items = "<option>---------------------</option>";
$.each(data, function(i, model) {
items += "<option value='" + model.Value + "'>" + model.Text + "</option>";
});
$("#Model").html(items);
});
});
});
</script>
链接地址: http://www.djcxy.com/p/39207.html
上一篇: validating cascading dropdownlist
下一篇: How to access fields in View with different type ASP.NET MVC