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值。但综合比较,如果只是为了选择而获得值,字符串形式的绑定显然更有效率。
asp.net MVC 枚举类型的处理的几种方式的更多相关文章
- ASP.NET MVC 枚举类型转LIST CONTROL控件
在实际应用中,我们经常会用到下拉框.多选.单选等类似的控件,我们可以统称他们为List Control,他们可以说都是一种类型的控件,相同之处都是由一个或一组键值对的形式的数据进行绑定渲染而成的. 这 ...
- ASP.NET MVC Controller向View传值的几种方式
上几篇博文提到MVC和WebForm的区别,主要是MVC的Controller和View将传统的WebForm的窗体和后台代码做了解耦,这篇博文简单介绍一下在MVC中Controller向View是如 ...
- ASP.NET MVC post请求接收参数的三种方式
1.在控制器中建立一个PostDemo方法,建立视图创建一个表单 <h2>PostDemo</h2> name的值:@ViewBag.name <br /> nam ...
- asp.net mvc 上传下载文件的几种方式
view: <!DOCTYPE html> <html> <head> <meta name="viewport" content=&qu ...
- ASP.NET MVC 描述类型(二)
ASP.NET MVC 描述类型(二) 前言 上个篇幅中说到ControllerDescriptor类型的由来过程,对于ControllerDescriptor类型来言ActionDescriptor ...
- ASP.NET MVC 描述类型(一)
ASP.NET MVC 描述类型(一) 前言 在前面的好多篇幅中都有提到过ControllerDescriptor类型,并且在ASP.NET MVC 过滤器(一)篇幅中简单的描述过,今天我们就来讲一下 ...
- Asp.Net Mvc 返回类型总结
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- .NET MVC控制器向视图传递数据的四种方式
.NET MVC控制器向视图传递数据的四种方式: 1.ViewBag ViewBag.Mvc="mvc"; 2.ViewData ViewBag["Mvc"] ...
- 【转】java中byte数组与int类型的转换(两种方式)----不错
原文网址:http://blog.csdn.net/piaojun_pj/article/details/5903009 java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法, ...
随机推荐
- 获得HttpServletRequest 和HttpSession对象
package org.jeecgframework.core.util; import java.util.HashMap; import java.util.Map; import javax.s ...
- 使用Navicat进行数据库对比同步
使用Navicat进行数据库对比同步 当有多个数据库时,有时会出现结构或者数据不同步的问题,这时候可以使用navivat工具对比同步( 我的Navicat版本是11.0.17). 参考博客: 岁伏的博 ...
- poj2773求第K个与m互质的数
//半年前做的,如今回顾一下,还是有所收货的,数的唯一分解,.简单题. #include<iostream> #include<cstring> using namespace ...
- BZOJ 2308 莫队入门经典
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2038 参考博客 https://www.cnblogs.com/Paul-Guderi ...
- LightOJ1094 - Farthest Nodes in a Tree(树的直径)
http://lightoj.com/volume_showproblem.php?problem=1094 Given a tree (a connected graph with no cycle ...
- 高清(200万像素)多灯红外防水枪型网络摄像机 DH-IPC-HFW5200-IRA
DH-IPC-HFW5200-IRA-0722A http://download.dahuatech.com/instruction_download.php?classOne=3907&cl ...
- 报错: The type ByteInputStream is not accessible due to restriction on required library
报错: Access restriction:The type JPEGCodec is not accessible due to restriction on required library C ...
- Meteor第一个应用程序
这一个小教程将教你如何建立你的第一个 Meteor 应用程序. 步骤 1 - 创建App 要创建应用程序,我们将从命令提示符窗口运行 meteor create 命令.该应用程序的名称是 meteor ...
- 【转】面向切面编程-AOP,挺有用的
原文:http://blog.csdn.net/yangzhihello/article/details/40377399 下面的代码有点问题, ins[methodName] = function( ...
- 项目实战之玩转div+css制作自己定义形状
项目需求 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...