码迷,mamicode.com
首页 > 编程语言 > 详细

mvc JavaScriptResult的用法

时间:2014-11-03 17:42:01      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:style   http   io   color   ar   os   java   for   sp   

一、JavaScriptResult在MVC中的定义的代码片段

 
C# 代码   复制
bubuko.com,布布扣
bubuko.com,布布扣 public class JavaScriptResult : ActionResult
bubuko.com,布布扣 {
bubuko.com,布布扣     public override void ExecuteResult(ControllerContext context)
bubuko.com,布布扣     {        
bubuko.com,布布扣         HttpResponseBase response = context.HttpContext.Response;
bubuko.com,布布扣         response.ContentType = "application/x-javascript";
bubuko.com,布布扣         response.Write(this.Script);
bubuko.com,布布扣     }
bubuko.com,布布扣     public string Script { get; set; }
bubuko.com,布布扣 }
bubuko.com,布布扣  
bubuko.com,布布扣 public abstract class Controller : ControllerBase, ...
bubuko.com,布布扣 {
bubuko.com,布布扣     //其他成员
bubuko.com,布布扣     protected virtual JavaScriptResult JavaScript(string script);
bubuko.com,布布扣 }
bubuko.com,布布扣

 

其中:JavaScriptResult的属性Script表示响应的JavaScript脚本,而用于响应JavaScript脚本的ExecuteResult方法除了将脚本内容写入当前HttpResponse之外,还会将响应的媒体类型设置为“application/x-javascript”(不是“text/javascript”)。

 

二、可以通过ContentResult来实现与JavaScriptResult一样的脚本响应功能

 

例如下面两段代码效果一样

 
C# 代码   复制
bubuko.com,布布扣
bubuko.com,布布扣//JavaScriptResult:
bubuko.com,布布扣     public class FooController : Controller
bubuko.com,布布扣     {
bubuko.com,布布扣         public ActionResult JavaScript()
bubuko.com,布布扣         {
bubuko.com,布布扣             return JavaScript("alert(‘Hello World!‘);");
bubuko.com,布布扣         }
bubuko.com,布布扣     }
bubuko.com,布布扣      
bubuko.com,布布扣    //ContentResult:
bubuko.com,布布扣    public class FooController : Controller
bubuko.com,布布扣    {
bubuko.com,布布扣        public ActionResult JavaScript()
bubuko.com,布布扣        {
bubuko.com,布布扣            return Content("alert(‘Hello World!‘);", "application/x-javascript");
bubuko.com,布布扣        }
bubuko.com,布布扣    }
bubuko.com,布布扣

 

 

三、JavaScriptResult实例

 

下面演示一个在线购物的场景:用于完成了商品选购之后提交订单,服务端在处理订单的时候需要确认订购的商品是否超出了对应的库存量,如果存量充裕则正常处理该订单,否则提示库存不足,并将商品实时库存量显示给用户让他修正相应商品的购买量。我们利用JavaScript的方式来提示订单处理结果的消息(成功处理或者库存不足),很显然这段JavaScript应该是动态的(库存量是动态的)。

 

1、定义一个ShoppingCart类表示购物车。如下面的代码片断所示,ShoppingCart是表示购物车商品项ShoppingCartItem对象的列表,而ShoppingCartItem的三个属性(Id、Name和Quantity)分别表示商品ID、名称和订购数量。

 
C# 代码   复制
bubuko.com,布布扣
bubuko.com,布布扣     public class ShoppingCart : List<ShoppingCartItem>
bubuko.com,布布扣     {}
bubuko.com,布布扣      
bubuko.com,布布扣     public class ShoppingCartItem
bubuko.com,布布扣     {
bubuko.com,布布扣         public string     Id { get; set; }
bubuko.com,布布扣         public string     Name { get; set; }
bubuko.com,布布扣         public int        Quantity { get; set; }
bubuko.com,布布扣     }
bubuko.com,布布扣

 

 

2、创建如下一个HomeController。我们在默认的Action方法Index中创建一个包含三个商品的ShoppingCart对象,并将其作为Model呈现在对应的View中。Action方法ProcessOrder用于处理提交的购买订单,如果订购商品的数量没有超过库存量(通过一个静态字典字段stock表示),则通过调用alert函数提示“购物订单成功处理”,否则提示“库存不足”,并将相应商品当前库存量显示出来。

 

 
C# 代码   复制
bubuko.com,布布扣
bubuko.com,布布扣     public class HomeController : Controller
bubuko.com,布布扣     {
bubuko.com,布布扣         private static Dictionary<string, int> stock = new Dictionary<string, int>();
bubuko.com,布布扣         static HomeController()
bubuko.com,布布扣         {
bubuko.com,布布扣             stock.Add("001", 20);
bubuko.com,布布扣             stock.Add("002", 30);
bubuko.com,布布扣             stock.Add("003", 40);
bubuko.com,布布扣         }
bubuko.com,布布扣        public ActionResult Index()
bubuko.com,布布扣        {
bubuko.com,布布扣            ShoppingCart cart = new ShoppingCart();
bubuko.com,布布扣            cart.Add(new ShoppingCartItem { Id = "001", Quantity=1, Name = "商品A" });
bubuko.com,布布扣            cart.Add(new ShoppingCartItem { Id = "002", Quantity = 1, Name = "商品B" });
bubuko.com,布布扣            cart.Add(new ShoppingCartItem { Id = "003", Quantity = 1, Name = "商品C" });
bubuko.com,布布扣            return View(cart);
bubuko.com,布布扣        }
bubuko.com,布布扣            
bubuko.com,布布扣        public ActionResult ProcessOrder(ShoppingCart cart)
bubuko.com,布布扣        {
bubuko.com,布布扣            StringBuilder sb = new StringBuilder();
bubuko.com,布布扣            foreach (var cartItem in cart)
bubuko.com,布布扣            {
bubuko.com,布布扣                if (!CheckStock(cartItem.Id, cartItem.Quantity))
bubuko.com,布布扣                {
bubuko.com,布布扣                    sb.Append(string.Format("{0}: {1};", cartItem.Name,stock[cartItem.Id]));
bubuko.com,布布扣                }
bubuko.com,布布扣            }
bubuko.com,布布扣            if(string.IsNullOrEmpty(sb.ToString()))
bubuko.com,布布扣            {
bubuko.com,布布扣                return Content("alert(‘购物订单成功处理!‘);", "text/javascript");
bubuko.com,布布扣            }
bubuko.com,布布扣            string script = string.Format("alert(‘库存不足! ({0})‘);", sb.ToString().TrimEnd(;));
bubuko.com,布布扣            return JavaScript(script); 
bubuko.com,布布扣        }
bubuko.com,布布扣     
bubuko.com,布布扣        private bool CheckStock(string id, int quantity)
bubuko.com,布布扣        {
bubuko.com,布布扣            return stock[id] >= quantity;
bubuko.com,布布扣        }
bubuko.com,布布扣    }
bubuko.com,布布扣

 

3、创建Action方法Index对应的View。在一个以Ajax请求提交的表单(表单的Action属性对应着上面定义的Action方法ProcessOrder)中显示了购物车中的商品和数量,用于可以修改订购数量并通过点击“提交订单”按钮以Ajax请求的方式提交订单。

 

 
C# 代码   复制
bubuko.com,布布扣
bubuko.com,布布扣    @model ShoppingCart
bubuko.com,布布扣     <html>
bubuko.com,布布扣         <head>
bubuko.com,布布扣             <title>用户登录</title>
bubuko.com,布布扣             <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.6.2.js")"></script>   1:         <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")">
bubuko.com,布布扣</script>        
bubuko.com,布布扣         </head>
bubuko.com,布布扣         <body>
bubuko.com,布布扣             @using (Ajax.BeginForm("ProcessOrder", new AjaxOptions()))
bubuko.com,布布扣             {
bubuko.com,布布扣                for (int i = 0; i < Model.Count; i++)
bubuko.com,布布扣                {         
bubuko.com,布布扣                    <div>
bubuko.com,布布扣                        @Html.HiddenFor(m=>m[i].Id)
bubuko.com,布布扣                        @Html.HiddenFor(m => m[i].Name)
bubuko.com,布布扣     
bubuko.com,布布扣                        @Html.DisplayFor(m => m[i].Name):
bubuko.com,布布扣                        @Html.EditorFor(m => m[i].Quantity)
bubuko.com,布布扣                    </div>
bubuko.com,布布扣                }
bubuko.com,布布扣                <input type="submit" value="提交订单" />
bubuko.com,布布扣            }
bubuko.com,布布扣        </body>
bubuko.com,布布扣    </html>
bubuko.com,布布扣

 

4、运行结果:一个包含三个商品的购物车信息会被呈现出来,当我们输入相应的订购数量并点击“提交订单”后,订单处理结果消息会弹出来。下图所示的就是库存不足的情况下显示的消息。

 

bubuko.com,布布扣

 

mvc JavaScriptResult的用法

标签:style   http   io   color   ar   os   java   for   sp   

原文地址:http://www.cnblogs.com/rrxc/p/4071751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!