控制器代码:
///assemblyString:程序集名称的长格式,name:获取程序集实例中具有指定名称的 System.Type 对象,except:除了哪些枚举(键或值都可以)不加载到下拉列表框
///此方法写在控制器当中,GetEnum则为 最下面Html代码中的Action名
public ActionResult GetEnum(string assemblyString, string name, string except = "")
{
except = string.Format(",{0},", except.ToUpper());
Assembly ass = Assembly.Load(assemblyString);
Type type = ass.GetType(name);
if (type != null && type.IsEnum)
{
string[] names = type.GetEnumNames();
int[] values = (int[])type.GetEnumValues();
List<object> list = new List<object>();
for (int i = 0; i < names.Length; i++)
{
if (except.IndexOf(string.Format(",{0},", names[i].ToUpper())) < 0)
list.Add(new { text = names[i], value = values[i] });
}
return Json(list);
}
return Json(null);
}
js代码:(使用前引用jquery)
$(function () {
AjaxSelect();
//获取枚举的值并将名称和值绑定在选择框,params提交到后台地址的参数对象
function AjaxSelect() {
//ajaxselect 在要用到自动加载枚举键值的select标签上必须加class值
$(".ajaxselect").each(function () {
var _this = $(this);
//eval 表示 将字符串作为javascript代码进行执行,此处代表是一个对象
var opts = eval('(' + _this.attr("data-options") + ')');
var option = "";
$.post(opts.url, opts.params, function (data) {
$.each(data, function (i, n) {
if (n.text == opts.select)
option += "<option selected='selected' value='" + n.value + "'>" + n.text + "</option>";
else
option += "<option value='" + n.value + "'>" + n.text + "</option>";
});
_this.append(option);
}, "json");
});
}
});
Html中的具体写法:
<select title="请选择角色" class="ajaxselect" data-options="{url:'@Url.Action("Action名", "控制器名称")',select:'设置要默认选中的枚举 键'}">
<option value="">选择</option>
</select>