В чем разница между функциями JavaScript и Content в MVC3? - PullRequest
1 голос
/ 30 мая 2011

В ASP.NET MVC3 следующие два метода кажутся возвращающими одинаковые результаты:

public ActionResult Blah()
{
    return JavaScript("alert('" + DateTime.Now + "');");
}

public ActionResult Blah()
{
    return Content("alert('" + DateTime.Now + "');");
}

Но, когда я просматриваю результаты первого в Google Chrome, шрифт - это моноширинный шрифт, а второй - Arial (или что-то еще).

Это наводит меня на мысль, что, вероятно, существует заголовок "content-type" из "text / javascript" или что-то попало по проводам ...

Тогда у меня такой вопрос:

  • Что делает функция "JavaScript" (которая выдает JavaScriptResult) , что не делает метод Content (который выдает ContentResult)?

  • Каковы преимущества этого метода?

Пожалуйста, не включайте религиозные соображения относительно того, почему этот метод "плох" ... Меня интересует только то, что "что" ... как "что он делает?"

1 Ответ

3 голосов
/ 30 мая 2011

Результат действия javascript устанавливает response.ContentType для application / x-javascript где в качестве содержимого actionresult можно установить, вызвав его свойство ContentType.

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.

...