2011-09-01 30 views
6

如果我试图从我的控制器返回一些JavaScript这样的:ASP.NET MVC - 返回JavaScriptResult不起作用

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

我没有在我的浏览器中查看警报消息,但我得到一个下载从命名为动作的页面(我的情况为register.js)请求.js脚本。哪里不对?

+0

你打电话给你的行为?此外,请注意,这通常被认为是[反模式](http://devlicio.us/blogs/billy_mccafferty/archive/2009/02/07/beware-of-asp-net-mvc-javascriptresult.aspx) 。 – R0MANARMY

回答

2

尝试以下。

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 
} 

} 
7

我不会回来的Javascript,我将返回Content,然后在页面上,我将这些内容转换到警报:

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

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

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

我认为这是反模式,但我有时需要从我的控制器调用定义的JavaScript函数(alert();是一个示例)。谢谢。 – User907863

12

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

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

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

我在ASP.NET论坛上找到了答案。看看Bruce的答案在下面的链接,它为什么被做这样一个更完整的解释:

Return JavascriptResult Not Working

+0

谢谢!这在直接从浏览器地址栏调用ActionMethod时起作用,这正是我需要做的。 –

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!');");    
} 
1

当你调用从视图你的行动,确保您使用@Ajax.ActionLink代替@Html.ActionLink辅助方法。然后JavaScript将正确渲染,并显示您的警报。