1

在 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”的标题“content-type”或某些东西...

那么我的问题是:

  • “JavaScript”函数(产生 JavaScriptResult)做了哪些 Content 方法(产生 ContentResult)没有做的事情?

  • 这种方法有什么好处?

请不要包括关于为什么这种方法“不好”的宗教原因......我只关心知道“什么”......就像“它有什么作用?”

4

1 回答 1

3

javascript actionresult 将 response.ContentType 设置为 application/x-javascript,其中 content actionresult 可以通过调用其 ContentType 属性来设置。

Javascript结果:

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);
            }
        }
    }
} 

内容结果

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 的客户端。

于 2011-05-29T23:08:58.597 回答