mvc JavaScriptResult的用法

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

C# 代码   复制


 public class JavaScriptResult : ActionResult
 {
     public override void ExecuteResult(ControllerContext context)
     {
         HttpResponseBase response = context.HttpContext.Response;
         response.ContentType = "application/x-javascript";
         response.Write(this.Script);
     }
     public string Script { get; set; }
 }

 public abstract class Controller : ControllerBase, ...
 {
     //其他成员
     protected virtual JavaScriptResult JavaScript(string script);
 }

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

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

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

C# 代码   复制


//JavaScriptResult:
     public class FooController : Controller
     {
         public ActionResult JavaScript()
         {
             return JavaScript("alert(‘Hello World!‘);");
         }
     }

    //ContentResult:
    public class FooController : Controller
    {
        public ActionResult JavaScript()
        {
            return Content("alert(‘Hello World!‘);", "application/x-javascript");
        }
    }

三、JavaScriptResult实例

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

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

C# 代码   复制


     public class ShoppingCart : List<ShoppingCartItem>
     {}

     public class ShoppingCartItem
     {
         public string     Id { get; set; }
         public string     Name { get; set; }
         public int        Quantity { get; set; }
     }

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

C# 代码   复制


     public class HomeController : Controller
     {
         private static Dictionary<string, int> stock = new Dictionary<string, int>();
         static HomeController()
         {
             stock.Add("001", 20);
             stock.Add("002", 30);
             stock.Add("003", 40);
         }
        public ActionResult Index()
        {
            ShoppingCart cart = new ShoppingCart();
            cart.Add(new ShoppingCartItem { Id = "001", Quantity=1, Name = "商品A" });
            cart.Add(new ShoppingCartItem { Id = "002", Quantity = 1, Name = "商品B" });
            cart.Add(new ShoppingCartItem { Id = "003", Quantity = 1, Name = "商品C" });
            return View(cart);
        }

        public ActionResult ProcessOrder(ShoppingCart cart)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var cartItem in cart)
            {
                if (!CheckStock(cartItem.Id, cartItem.Quantity))
                {
                    sb.Append(string.Format("{0}: {1};", cartItem.Name,stock[cartItem.Id]));
                }
            }
            if(string.IsNullOrEmpty(sb.ToString()))
            {
                return Content("alert(‘购物订单成功处理!‘);", "text/javascript");
            }
            string script = string.Format("alert(‘库存不足! ({0})‘);", sb.ToString().TrimEnd(‘;‘));
            return JavaScript(script);
        }

        private bool CheckStock(string id, int quantity)
        {
            return stock[id] >= quantity;
        }
    }

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

C# 代码   复制


    @model ShoppingCart
     <html>
         <head>
             <title>用户登录</title>
             <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")">
</script>
         </head>
         <body>
             @using (Ajax.BeginForm("ProcessOrder", new AjaxOptions()))
             {
                for (int i = 0; i < Model.Count; i++)
                {
                    <div>
                        @Html.HiddenFor(m=>m[i].Id)
                        @Html.HiddenFor(m => m[i].Name)

                        @Html.DisplayFor(m => m[i].Name):
                        @Html.EditorFor(m => m[i].Quantity)
                    </div>
                }
                <input type="submit" value="提交订单" />
            }
        </body>
    </html>

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

时间: 2024-09-30 18:36:10

mvc JavaScriptResult的用法的相关文章

MVC 中DropDownList 用法

MVC 中DropDownList  用法 后台 1 Dictionary<string, int> dc = new Dictionary<string, int>(); 2 dc.Add("订单提交", 0); 3 dc.Add("订单确认", 1); 4 dc.Add("已入库", 2); 5 dc.Add("代付款", 3); 6 dc.Add("已支付", 4); 7 dc

MVC JsonResult的用法

本文导读:当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON格式予以响应,而这可以通过JsonResult来解决.下面介绍MVC中JsonResult的用法 一.MVC中JsonResult定义的代码片段 public class JsonResult : ActionResult { public override void ExecuteResult(ControllerContext context); p

Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)

原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi

MVC中ActionFilterAttribute用法并实现统一授权

MVC中ActionFilterAttribute经常用来处理权限或者统一操作时的问题. 先写一个简单的例子,如下: 比如现在有一个用户管理中心,而这个用户管理中心需要登录授权后才能进去操作或浏览信息,这个时候我们不可能每一个页面都写一遍权限的判断,这个时候就需要我们进行统一判断权限,那么怎么统一权限呢?如果你了解MVC那么下面的代码应该很容易看懂,否则还是先看一下MVC基础吧. 1.创建一个类(用来检查用户是否登录和用户权限)代码如下: // 过滤器    public class Membe

MVC中HtmlHelper用法大全参考

解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web.Mvc.Html之中,主要由7个静态类组成,它们分别是FormExtensions类,InputExtensions类,LinkExtensions类,SelectExtensions类,TextExtensions类,ValidationExtensions类,RenderPartialExtensions类. 为了方便开发者使用Htm

MVC的JsonResult用法

在Asp.net Mvc 2中由于对数据的保护,默认情况下request为post,所以在前端请求的时候则需要以post方式request action方法: public JsonResult GetPersonInfo() { var person = new { Name = "张三", Age = 22, Sex = "男" }; return Json(person); } 前端请求代码: $.ajax({ url: "/FriendLink/G

MVC过滤器的用法(转)

转自:http://www.studyofnet.com/news/257.html APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这时候就用到了过滤器. 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能 判断登录与否或用户权限 决策输出缓存 防盗链 防蜘蛛 本地化与国际化设置 实现动态Action MVC支持的过滤器类型有四种,分别是:Authorization(授权),Act

Spring MVC的简单用法

一.Multiaction Controller package cn.framelife.mvc.control; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.sprin

Asp.Net Mvc Areas 的用法与好处

前言 在项目中为什么要使用Areas 进行分离 大家都知道,一般的Web应用都有前台(面向用户)和后台(面向管理员)两部分,我们希望以/localhost/Admin 开始的Url 是用户的后台管理地址,因此我们会这么配置自己的路由图. routes.MapRoute( name: "Admin", url: "Admin/{controller}/{action}/{id}", defaults: new { controller = "Home&quo