【问题标题】:ASP.NET MVC - Returning JavaScriptResult doesn't workASP.NET MVC - 返回 JavaScriptResult 不起作用
【发布时间】:2011-09-01 13:27:22
【问题描述】:

如果我尝试像这样从我的控制器返回一些 JavaScript:

public ActionResult DoSomething()
{       
    return JavaScript("alert('Hello world!');");            
}

我没有在浏览器中查看警报消息,但我从名为操作的页面(在我的例子中为 register.js)收到了一个 .js 脚本的下载请求。怎么了?

【问题讨论】:

  • 你如何称呼你的行动?另外请注意,这通常被认为是anti-pattern

标签: javascript asp.net-mvc-3 controller


【解决方案1】:

在将结果作为JavaScriptResult 返回时,我遇到了类似的问题,指定的 JavaScript 没有执行。在我的例子中,JavaScript 内容呈现为 <pre> 标签内的文本。

解决方案是使用Content() 方法将JavaScript 作为ContentResult 返回。所以试试:

public ActionResult DoSomething()
{       
    return Content("<script language='javascript' type='text/javascript'>alert('Hello world!');</script>");            
}

我在 ASP.NET 论坛上找到了答案。请查看以下链接中布鲁斯的回答,以更完整地解释为什么这样做:

Return JavascriptResult Not Working

【讨论】:

  • 谢谢!这在直接从浏览器地址栏调用 ActionMethod 时有效,这是我需要做的。
【解决方案2】:

我不会返回 Javascript,我会返回 Content,然后在页面上,我会将该内容转换为警报:

public ActionResult DoSomething()
{       
    return Content("Hello world!");            
}

$.ajax({
    url: "/Action/DoSomething/",
    type: "POST",
    success: editSuccess,
    error: editFailure
});

function editSuccess(data) {
   alert(data);
}

【讨论】:

  • 我知道这是反模式,但有时我需要从我的控制器调用定义的 javascript 函数(alert(); 就是一个例子)。谢谢。
【解决方案3】:

如果您需要使用 JavaScriptResult 返回一个 js 代码,请记住您的操作应该通过 ajax 调用来调用。通过 Html.Actionlink 或其他控件直接调用此操作会导致显示脚本文本而不是运行脚本。所以你需要在你的视图中添加一个js代码:

<script type="text/javascript">
    $(function () {
          $('#myButtonId').click(function () { 
                $.getScript("/MyController/DoSomething"); 
           });
    });
</script>

以及您在 MyController 中的操作:

public ActionResult DoSomething()
{       
    return JavaScript("alert('Hello world!');");            
}

【讨论】:

    【解决方案4】:

    试试下面的。

    public ActionResult DoSomething(){
    
    return Json(new {isok=true, message="Your Message", data=...});
    
    //True / False Json Return
    //return UserObj == null ?
    //Json(true, JsonRequestBehavior.AllowGet) :
    //Json(string.Format("YourObject '{0}' to String", YourObject),
    //JsonRequestBehavior.AllowGet);
    
    }
    
    //view
    $.ajax
    {
    
    //code
    success :function(returnvalue)
    {
    
    if(!returnvalue.isok)
    {
    window.alert("Error:" + returnvalue.message);
    }
    else
    {
    //do the stuff with returnvalue.data
    }
    
    }
    

    【讨论】:

      【解决方案5】:

      当您从视图调用您的操作时,请确保使用 @Ajax.ActionLink 而不是 @Html.ActionLink 辅助方法。然后 JavaScript 将正确呈现并显示您的警报。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-13
        • 2019-07-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多