验证级联下拉列表

我正在使用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