ASP.NET MVC - 返回JavaScriptResult不起作用

时间:2011-09-01 13:27:23

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

如果我尝试从我的Controller返回一些JavaScript:

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

我没有在我的浏览器中查看警报消息,但是我从名为action的页面获取了.js脚本的下载请求(在我的情况下是register.js)。有什么问题?

5 个答案:

答案 0 :(得分:13)

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

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

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

我在ASP.NET论坛上找到了答案。在下面的链接中查看Bruce的答案,以更全面地解释为什么以这种方式完成:

Return JavascriptResult Not Working

答案 1 :(得分: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);
}

答案 2 :(得分: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!');");            
}

答案 3 :(得分: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
}

}

答案 4 :(得分:1)

从视图中调用操作时,请确保使用@Html.ActionLink而不是final ZonedDateTime input = ZonedDateTime.now(); for(int i = 1; i < 10; i++) { final ZonedDateTime startOfLastWeek = input.minusWeeks(i).with(DayOfWeek.MONDAY); System.out.print(startOfLastWeek.format(DateTimeFormatter.ISO_LOCAL_DATE)); final ZonedDateTime endOfLastWeek = startOfLastWeek.plusDays(6); System.out.println(" - " + endOfLastWeek.format(DateTimeFormatter.ISO_LOCAL_DATE)); } 辅助方法。然后,JavaScript将正确呈现,并显示您的警报。