【问题标题】:How to return JavaScript from controller?如何从控制器返回 JavaScript?
【发布时间】:2019-12-20 17:22:21
【问题描述】:

我正在使用 ASP.NET Core 2.2 项目,我需要从控制器返回 JavaScript。但是,我怀疑没有直接的方法,因此,我按照this OS 的回答并更改了我的代码如下:

public IActionResult MyAction()
{
    var sb = new StringBuilder();
    sb.Append("$(document).ready(function(){");
    sb.Append("alert('hi')");
    sb.Append("});");            
    return new JavaScriptResult(sb.ToString());
}

public class JavaScriptResult : ContentResult
{
    public JavaScriptResult(string script)
    {
        this.Content = script;
        this.ContentType = "application/javascript";
    }
}

虽然它只是写纯文本。有办法吗?

【问题讨论】:

  • 当你说它是“只是写纯文本而不是”,是否可以理解为Content-Type作为text/plain发送?
  • 是的,没错! @约翰
  • 根据您的实现,我可以假设您希望在调用控制器方法时执行脚本。如果我是对的,那么如果您通过 ViewData 对象传递脚本并从您的视图页面引用,例如:Controller: ViewData["sayhello"] = "alert('hello');" 然后从 View: 头部标签<script>@Html.Raw(ViewData["sayhello"].ToString())</script>
  • 是的,这是一种替代方式,目前实现相同。但是,我们将不再有查看页面

标签: javascript c# asp.net-core asp.net-core-2.2


【解决方案1】:

您可以在页面中使用 ajax 加载 javascript:

<script>
    $(function () {
            $.getScript("/Controller/Action");
    });

</script>

您的发球方:

public IActionResult DoSomething()
{
    return new  JavaScriptResult("alert('Hello world!');");
}

public class JavaScriptResult : ContentResult
{
    public JavaScriptResult(string script)
    {
        this.Content = script;
        this.ContentType = "application/javascript";
    }
}

【讨论】:

    【解决方案2】:

    您需要添加第二个参数 Content-type 并返回“Content”而不是 JavaScriptResult:

    `public IActionResult MyAction()
    {
      var sb = new StringBuilder();
      sb.Append("$(document).ready(function(){");
      sb.Append("alert('hi')");
      sb.Append("});");            
      return Content(sb.ToString(), "text/html");
    }`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-27
      • 2017-07-29
      • 2015-01-11
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      相关资源
      最近更新 更多