1.在Action处理之后,必须有一个返回值,这个返回值必须继承自ActionResult的对象
2.ActionResult,实际就是服务器端响应给客户端的结果
FileContentResult的应用案例
做一个验证码图片
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Drawing; using System.IO; using System.Drawing.Drawing2D; using System.Drawing.Imaging; namespace MvcBookShop.Common { public class ValidateCode { /// <summary> /// 生成验证码 /// </summary> /// <param name="length">指定验证码的长度</param> /// <returns></returns> public string CreateValidateCode(int length) { int[] randMembers = new int[length]; int[] validateNums = new int[length]; string validateNumberStr = ""; //生成起始序列值 int seekSeek = unchecked((int)DateTime.Now.Ticks); Random seekRand = new Random(seekSeek); int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000); int[] seeks = new int[length]; for (int i = 0; i < length; i++) { beginSeek += 10000; seeks[i] = beginSeek; } //生成随机数字 for (int i = 0; i < length; i++) { Random rand = new Random(seeks[i]); int pownum = 1 * (int)Math.Pow(10, length); randMembers[i] = rand.Next(pownum, Int32.MaxValue); } //抽取随机数字 for (int i = 0; i < length; i++) { string numStr = randMembers[i].ToString(); int numLength = numStr.Length; Random rand = new Random(); int numPosition = rand.Next(0, numLength - 1); validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1)); } //生成验证码 for (int i = 0; i < length; i++) { validateNumberStr += validateNums[i].ToString(); } return validateNumberStr; } /// <summary> /// 创建验证码的图片 /// </summary> /// <param name="containsPage">要输出到的page对象</param> /// <param name="validateNum">验证码</param> public byte[] CreateValidateGraphic(string validateCode) { Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的干扰线 for (int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic)); LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(validateCode, font, brush, 3, 2); //画图片的前景干扰点 for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); //保存图片数据 MemoryStream stream = new MemoryStream(); image.Save(stream, ImageFormat.Jpeg); //输出图片流 return stream.ToArray(); } finally { g.Dispose(); image.Dispose(); } } } }
//创建图片验证码 public ActionResult ValidateImage() { ValidateCode validateCode=new ValidateCode (); string strCode=validateCode.CreateValidateCode(5); Session["validateCode"]=strCode; Byte[] ImageCode=validateCode.CreateValidateGraphic(strCode); return File(ImageCode, @"image/gif");//类似于Content-Type,表示服务器响应给服务器端的类型 } //表示返回的是FileContentResult对象,ImageCode表示一个二进制的字节数组,@"image/gif"表示服务器相应给客户端的二进制文件类型。
JsonResult案例,实际是把对象序列化后发给客户端。(这个对象一定要重新构建对象的序列图,实际就是需要new一个新的对象出来)
在用户登陆之后鼠标移动在上面有个悬浮窗显示用户的基本信息
<div id="userinfo" style="display:none"> <table border="1"> <tr> <th> 用户名 </th> <th> 地址 </th> <th> 电话 </th> </tr> <tr> <td id="Name"> </td> <td id="Address"> </td> <td id="Phone"> </td> </tr> </table> </div>
<script language="javascript" type="text/javascript"> $(function () { $.get(("/User/ShowUser"), null, function (data) { if (data != "0") { $("#loginUser").text(data).attr("href", "#").attr("iflogin", "true"); } }, "text"); $("#loginUser").mouseover(function () { if ($(this).attr("iflogin")) { $.post("/User/GetUserInfo", null, function (data) { $("#Name").html(data.Name); $("#Address").html(data.Address); $("#Phone").html(data.Phone); $("#userinfo").css("display", "block"); }, "json"); } else { $(this).unbind("mouseover"); //将某个事件操作移除 } }).mouseout(function () { $("#userinfo").css("display", "none"); }); }); </script>
[HttpPost] public ActionResult GetUserInfo() { JsonResult js = new JsonResult(); MvcBookShop.Models.User user = Session["User"] as MvcBookShop.Models.User; //构建新的对象序列图,必须要new var obj = new { Name=user.Name, Address=user.Address, Phone=user.Phone }; js.Data = obj; //如果这个请求非要是get请求那么需要加下面这段代码 //js.JsonRequestBehavior = JsonRequestBehavior.AllowGet; //允许来自客户端的get请求 return js; }
注意:在请求JsonResult对象返回的时候,一般默认都采用Post方式请求,如果非要get方式请求,需要去加一段代码:设置:JsonRequestBehavior属性值为:JsonRequestBehavior.AllowGet;
[HttpGet] public ActionResult GetUserInfo() { JsonResult js = new JsonResult(); MvcBookShop.Models.User user = Session["User"] as MvcBookShop.Models.User; //构建新的对象序列图,必须要new var obj = new { Name=user.Name, Address=user.Address, Phone=user.Phone }; js.Data = obj; //如果这个请求非要是get请求那么需要加下面这段代码 js.JsonRequestBehavior = JsonRequestBehavior.AllowGet; //允许来自客户端的get请求 return js; }