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

mvc JavaScriptResult的用法的更多相关文章
- MVC 中DropDownList 用法
MVC 中DropDownList 用法 后台 Dictionary<string, int> dc = new Dictionary<string, int>(); dc. ...
- MVC中HtmlHelper用法大全参考
MVC中HtmlHelper用法大全参考 解析MVC中HtmlHelper控件7个大类中各个控件的主要使用方法(1) 2012-02-27 16:25 HtmlHelper类在命令System.Web ...
- Spring MVC RedirectAttributes的用法解决办法
Spring MVC RedirectAttributes的用法很久没发过技术贴了,今天对于一个问题纠结了2小时,遂放弃研究用另一种方法解决,奈何心中一直存在纠结,发帖求解 我先解释下什么是Redir ...
- System.Web.Mvc.JavaScriptResult.cs
ylbtech-System.Web.Mvc.JavaScriptResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, P ...
- MVC JsonResult的用法
本文导读:当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON格式予以响应,而这可以通过JsonResult来解决.下 ...
- ASP.NET Core MVC 模型绑定用法及原理
前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC ...
- Spring MVC的WebMvcConfigurerAdapter用法收集(零配置,无XML配置)
原理先不了解,只记录常用方法 用法: @EnableWebMvc 开启MVC配置,相当于 <?xml version="1.0" encoding="UTF-8&q ...
- MVC过滤器的用法
APS.NET MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这时候就用到了过滤器. 在Asp.netMvc中当你有以下及类似 ...
- MVC的JsonResult用法
在Asp.net Mvc 2中由于对数据的保护,默认情况下request为post,所以在前端请求的时候则需要以post方式request action方法: public JsonResult Ge ...
随机推荐
- [转]C++四种cast操作符
http://blog.csdn.net/starryheavens/article/details/4617637 C 风格(C-style)强制转型如下: (T) expression 或 T(e ...
- 2014-9-17二班----8 web project
http://localhost:8080/rwkj1/indexServlet 地址请求后,,,,浏览器 地址栏没有变化 package cn.rwkj.servlet; import java ...
- PowerDesigner连接Oracle数据库建表序列号实现自动增长
原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties — ...
- Spring面向切面编程(AOP,Aspect Oriented Programming)
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...
- SqlServer几个注意点
1.修改系统参数时,必须是单用户情况下才能更改成功!在Properties->Options中修改. 2.数据库字段值默认是不区分大小写的,修改方法如下: 2.1.右键数据库,选择Propert ...
- Lotus Notes中编程发送邮件(二)
在编程发送各种类似通知的邮件时,时常会需要发件人显示为某个特定的帐户,比如某个部门的名称或者管理员的名字.另一种需求是,用户收到某封邮件后,回复邮件的地址不同于发件人栏显示的地址.而正常情况下,发送邮 ...
- struts2更新版本操作有关事项备注
struts2更新版本操作有关事项备注, 更新主要jar包:struts2-convention-plugin-version,struts2-core-version, struts2-spring ...
- 【设计模式】—— 单例模式Singleton
前言:[模式总览]——————————by xingoo 模式意图 保证类仅有一个实例,并且可以供应用程序全局使用.为了保证这一点,就需要这个类自己创建自己的对象,并且对外有公开的调用方法. 模式结构 ...
- java中的toString方法
对于我这种用惯了C++的人来说,突然见到有人写java程序的时候竟然将整数和String类型的变量使用+连接到一起,感到非常奇怪,追究了下原因. 原来所有的java对象都有toString()方法,而 ...
- apache启动报错(98)Address already in use: make_sock: could not bind to...
# /etc/init.d/httpd startStarting httpd: (98)Address already in use: make_sock: could not bind to ad ...

{
public override void ExecuteResult(ControllerContext context)
{
}
}