参数映射的好处:不需要手工获取参数并作类型转换,在多个参数是非常明显
参数映射的优先级
表单数据 > 路由数据 > URL数据参数名要和目标数据参数名一致(不区分大小写)参数数据类型要和来源数据类型一致参数映射失败解决方法:将值类型定义为可为空类型,可选参数,如 int?等等映射模型 基本步骤: 获取表单数据构造实体模型调用业务逻辑方法并传递模型 public ActionResult Edit() { Student object = new Student() { StudentId = Convert.ToInt32(Request.Params["stuId"]), StudentName = Request.Params["stuName"], Birthday = Convert.ToDateTime(Request.Params["birthday"]), .... ... }; int result = new StudentManage().ModifyStudent(object); return View(); } | | ↓ //映射实体 public ActionResult Edit(Student object) { //需要在视图中将视图中name属性名设置的和实体属性名称相同, //且视图要为强类型视图,则可以直接映射实体对象 int result = new StudentManage().ModifyStudent(object); return View(); }
解决方法 HTTP请求谓词方法:针对请求类型定位方法,解决同名冲突问题 关于Http谓词 特点:经常使用,如果不加上该特性,默认动作方法接收所有谓词请求一般开发中都会加上谓词,限定请求谓词类型 特性名说明HttpGet针对Get请求HttpPost针对Post请求HttpDelete针对Delete请求HttpPut针对Put请求[HttpPost]//请求谓词 public ActionResult GetList(string className) { List<Student> stuList = new StudentManage().GetStudentsByClass(className); return View(); } [HttpGet]//请求谓词 public ActionResult GetList() { //获取提交的数据 string className = Request.Params["className"]; //获取数据 string stuId = Request.QueryString["stuId"]; //数据处理....... List<Student> stuList = new StudentManage().GetStudentsByClass(className); }
NonAction特性 可以将控制器中的方法声明为"非动作方法"对于控制器内部使用的方法非常有用,加上该特性后,外部不能访问,即可解决同名冲突问题 [NonAction] public ActionResult GetList() { //获取提交的数据 string className = Request.Params["className"]; //获取数据 string stuId = Request.QueryString["stuId"]; //数据处理....... List<Student> stuList = new StudentManage().GetStudentsByClass(className); }
ActionName特性 为动作方法"重新命名",解决同名冲突问题视同中使用时,需要修改成"重新命名"后的方法特别注意:当动作方法应用了ActionName特性后,如果动作方法内部使用View()方法调用视图(也就是不指定视图名称),则调用的是和ActionName设置值同名的视图 [ActionName("GetAllList")] public ActionResult GetList() { //获取提交的数据 string className = Request.Params["className"]; //获取数据 string stuId = Request.QueryString["stuId"]; //数据处理....... List<Student> stuList = new StudentManage().GetStudentsByClass(className); return View();//如果使用ActionName,返回View()不写参数时候,默认返回ActionName的视图 } //视图中调用路径 <form method="post" action="/Student/GetAllList"> ..... .... ... </form> ActionResult详解隐式动作类型 动作方法返回类型可以是ActionResult以外的类型 public int Sum(int num1,int num2) { int sum = num1 + num2; return sum; } public void WriteLog() { System.IO.File.WriteAllText(@"D:\Syslog.txt","保存文件"); }
类型说明 int类型 ->ContentResult类型void -> EmptyResult类型