在ASP.NET MVC3中,以下两个方法似乎返回相同的结果:
public ActionResult Blah()
{
return JavaScript("alert('" + DateTime.Now + "');");
}
public ActionResult Blah()
{
return Content("alert('" + DateTime.Now + "');");
}
但是,当我在Google Chrome浏览器中查看第一个结果时,字体是Mono-Spaced字体,而第二个字体是Arial(或其他)。
这让我相信可能有一个标题为“内容类型”的“text / javascript”或某些内容正在传播......
我的问题是:
“JavaScript”函数(产生JavaScriptResult)做什么 Content方法(产生ContentResult)不能做什么?
这种方法有什么好处?
请不要包含宗教原因,说明为什么这种方法“糟糕”......我只关心知道“什么”......就像“它做了什么?”
答案 0 :(得分:3)
javascript actionresult将response.ContentType设置为application / x-javascript 可以通过调用其ContentType属性来设置内容actionresult。
JavascriptResult:
using System;
namespace System.Web.Mvc
{
public class JavaScriptResult : ActionResult
{
public string Script
{
get;
set;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = "application/x-javascript";
if (this.Script != null)
{
response.Write(this.Script);
}
}
}
}
ContentResult类型
public class ContentResult : ActionResult
{
public string Content
{
get;
set;
}
public Encoding ContentEncoding
{
get;
set;
}
public string ContentType
{
get;
set;
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
HttpResponseBase response = context.HttpContext.Response;
if (!string.IsNullOrEmpty(this.ContentType))
{
response.ContentType = this.ContentType;
}
if (this.ContentEncoding != null)
{
response.ContentEncoding = this.ContentEncoding;
}
if (this.Content != null)
{
response.Write(this.Content);
}
}
}
好处是,您在MVC代码中明确指出这是JS,并且您使用正确的ContentType将结果发送到客户端。