mvc JavaScriptResult的用法
mvc JavaScriptResult的用法
mvc JavaScriptResult的用法一、JavaScriptResult在MVC中的定义的代码片段
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一样的脚本响应功能
例如下面两段代码效果一样
//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、名称和订购数量。
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函数提示“购物订单成功处理”,否则提示“库存不足”,并将相应商品当前库存量显示出来。
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请求的方式提交订单。
@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++)
{
<li>
@Html.HiddenFor(m=>m[i].Id)
@Html.HiddenFor(m => m[i].Name)
@Html.DisplayFor(m => m[i].Name):
@Html.EditorFor(m => m[i].Quantity)
</li>
}
<input type="submit" value="提交订单" />
}
</body>
</html>
4、运行结果:一个包含三个商品的购物车信息会被呈现出来,当我们输入相应的订购数量并点击“提交订单”后,订单处理结果消息会弹出来。下图所示的就是库存不足的情况下显示的消息。
- mvc中Action前HttpPost的作用
- iiS7中如何部署MVC3程序
- mysql数据结构讲解(详解MySQL 数据库隔离级别与MVCC)
- ASP.NET mvc异常处理的方法
- MVC中modelstate的使用
- php入门教程环境搭建教程(PHP从零开始打造自己的MVC框架之入口文件实现方法详解)
- MVC中报get_RazorKeywords()错误的解决方法
- mvc中使用uploadify批量上传
- mysql mvcc 流程(Mysql MVCC机制原理详解)
- asp.net MVC处理流程
- mysql mvcc 底层原理(浅析MySQL - MVCC)
- php框架制作方法(PHP从零开始打造自己的MVC框架之路由类实现方法分析)
- MVC升级后报"当前上下文中不存在ViewBag"错的解决方法
- php框架初始化教程学习(PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解)
- MVC中使用jQuery加载分部视图(PartialView)
- mvc中validateinput属性失效
- 解析葡萄牙6-1瑞士 进攻多点开花,贡萨洛-拉莫斯一战成名(解析葡萄牙6-1瑞士)
- 这支 奇兵队 腕大 有范儿还各怀绝技,毒贩杀人犯见了都要仓皇而逃(这支奇兵队腕大)
- 雄藩崛起 奇兵队与幕末长州藩军事改革(雄藩崛起奇兵队与幕末长州藩军事改革)
- 九月初,爱如蜜糖,甜到心扉,迷恋彼此,一日不见兮,思之若狂(九月初爱如蜜糖)
- ()
- 对你思念入骨的女人,跟你见面时会有这几种表现,藏都藏不住(对你思念入骨的女人)
热门推荐
- docker实战部署(使用docker搭建一套开发环境全家桶的详细教程)
- mysql查看执行计划
- ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解(ThinkPHP3.2.3框架实现的空模块、空控制器、空操作,跳转到错误404页面图文详解)
- sqlserver统计表大小(SqlServer 垂直分表减少程序改动)
- 有了云服务器还需要服务器吗(为什么云服务器淘汰了传统服务器?)
- 将docker中的镜像打包教程(本地使用docker打包部署镜像的方法)
- dedecms标签调用大全(DedeCMS 5.7系统TAG标签伪静态设置)
- 配置阿里云docker镜像地址(Docker配置阿里云镜像加速pull的实现)
- cssdisplay详解(详解CSS中的display:flex