zoukankan      html  css  js  c++  java
  • asp.net MVC 枚举类型的处理的几种方式

    枚举类型本质上是int类型,整型,这是非常重要的一点。

    可以使用(int)将它强制转换为 整形。如果要使用MVC5提供的新辅助方法@Html.EnumDropDownListFor()方法,就必须将枚举类型转换为整形。Url如  ?couseType=1。不然的话,始终无法选中 正确的枚举值。

    1、基架自动生成@Html.EnumDropDownListFor()辅助方法映射到模型类属性的元数据。

    @model MajorConstruction.Models.Course 

    <div class="form-group">

    @Html.LabelFor(model => model.CourseType, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
    @Html.EnumDropDownListFor(model => model.CourseType, htmlAttributes: new { @class = "form-control" })  //@Html.EnumDropDownListFor()辅助方法映射到模型类的属性的元数据。
    @Html.ValidationMessageFor(model => model.CourseType, "", new { @class = "text-danger" })
    </div>
    </div>

    2、使用 枚举类型作为传递参数,利用模型绑定将字符串类型隐式转化为枚举类型

    控制器:

    public ActionResult Index(CourseType? courseType)
    {
    List<CourseType> courseTypeList = new List<CourseType>();
    var courseTypeQuery = from c in _courseService.FindAll()
    select c.CourseType;

    courseTypeList.AddRange(courseTypeQuery.Distinct());

    ViewBag.courseTypeList = new SelectList(courseTypeList, courseType);  //返回枚举类型selectlist对象并有默认值。

    ViewBag.courseType = courseType;

    var courses = _courseService.FindAll();
    if (courseType != null)
    {
    courses = courses.Where(c => c.CourseType == courseType) ;  //利用模型绑定将字符串类型隐式转化为枚举类型。
    }

    ViewBag.CourseCount = courses.Count();
    return View(courses.OrderBy(c => c.PriorOrder).ThenBy(c => c.CourseName).ToList());
    }

    视图:

    @using (Html.BeginForm("Index", "Course", FormMethod.Get, new { @class = "form-inline", role = "form" }))
    {
    <label for="courseType" class="control-label">课程类型:</label>
    <div class="form-group">
    @Html.DropDownList("courseType", ViewBag.courseTypeList as SelectList, "全部课程", new { @class = "form-control" })  //将枚举类型的select对象,绑定到下拉菜单。并显示枚举值。
    </div>

    <input type="submit" value="查找" class="btn btn-primary" />

    }

    3、将枚举类型的值字符串作为传递参数,

    控制器:

    public ActionResult Index(string courseID, string resourceArrtibute, string searchTitle)
    {
    List<string> _resourceAttributeList = new List<string>();
    _resourceAttributeList.AddRange(Enum.GetNames(typeof(ResourceArrtibute))); //通过Enum.GetNames(typeof(枚举类型))的值转换为字符串,并添加到List 泛型对象。
    ViewBag.ResourceArrtibute = new SelectList(_resourceAttributeList, resourceArrtibute);  //返回所有枚举类型的值,并设定默认值。

    ViewBag.SearchTitle = searchTitle;


    List<Course> courses = new List<Course>();
    var courseListQuery = from r in _resourceService.FindAll().Include(r =>r.Course)
    select r.Course;
    courses.AddRange(courseListQuery.Distinct().OrderBy(c =>c.CourseName));

    ViewBag.CourseID = new SelectList(courses, "CourseID", "CourseName", courseID);
    var resources = _resourceService.FindAll().Include(r => r.Course);
    if(!string.IsNullOrEmpty(courseID))
    {
    resources = resources.Where(r => r.CourseID == courseID);

    }

    if (!string.IsNullOrEmpty(resourceArrtibute))
    {
    resources = resources.Where(r => r.ResourceArrtibute.ToString() == resourceArrtibute); //利用枚举类型的值的ToString()方法将枚举实例值转换为等效的字符串形式。

    }

    if (!string.IsNullOrEmpty(searchTitle))
    {
    resources = resources.Where(r => r.ResourceName.Contains(searchTitle));

    }

    return View(resources.ToList());
    }

    视图:

    @using (Html.BeginForm("Index", "Resource", FormMethod.Get, new { @class = "form-inline", role = "form" }))
    {
    <label for="CourseID" class="control-label">课程名称:</label>
    <div class="form-group">
    @Html.DropDownList("CourseID",null,"全部课程", new { @class="form-control" })
    </div>

    <label for="ResourceArrtibute" class="control-label">资源类型:</label>
    <div class="form-group">
    @Html.DropDownList("ResourceArrtibute", null, "全部类型", htmlAttributes: new { @class = "form-control" })  //将字符串形式的selectlist对象绑定到下拉菜单上。
    </div>

    <label for="searchTextbox" class="control-label"> 通过资源标题查找:</label>
    <div class="form-group">
    @Html.TextBox("SearchTitle", ViewBag.SearchTitle as string, new { @class = "form-control" })
    </div>

    <input type="submit" value="查找" class="btn btn-primary" />


    }

     4、取得枚举类型所有值和文本

    //返回所有枚举的选项。
    var premitiveCheckStateItems = from PremitiveCheckState e in Enum.GetValues(typeof(PremitiveCheckState))
    select new SelectListItem { Value = Convert.ToInt32(e).ToString(), Text = e.ToString() };
    ViewBag.premitiveCheckStateList = new SelectList(premitiveCheckStateItems, "Value", "Text",premitiveCheckState);

    从上面的例子可以看出,可以将字符串形式的selectList绑定到下拉菜单上,参数传递的是字符串。也可以将强类型的selectList对象绑定到下拉菜单上。参数传递的是ID值。但综合比较,如果只是为了选择而获得值,字符串形式的绑定显然更有效率。

  • 相关阅读:
    spring mvc给参数起别名
    聊聊分布式定时任务中间件架构及其实现--转
    Batch Normalization的算法本质是在网络每一层的输入前增加一层BN层(也即归一化层),对数据进行归一化处理,然后再进入网络下一层,但是BN并不是简单的对数据进行求归一化,而是引入了两个参数λ和β去进行数据重构
    终端安全工具 gartner 排名
    When Cyber Security Meets Machine Learning 机器学习 安全分析 对于安全领域的总结很有用 看未来演进方向
    DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网
    DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp
    DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat
    Data Mining and Machine Learning in Cybersecurity PDF
    ES failed to notify ClusterStateListener java.lang.IllegalStateException: environment is not locked
  • 原文地址:https://www.cnblogs.com/liuyuanhao/p/4510382.html
Copyright © 2011-2022 走看看