如果我尝试从我的Controller返回一些JavaScript:
public ActionResult DoSomething()
{
return JavaScript("alert('Hello world!');");
}
我没有在我的浏览器中查看警报消息,但是我从名为action的页面获取了.js脚本的下载请求(在我的情况下是register.js)。有什么问题?
答案 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的答案,以更全面地解释为什么以这种方式完成:
答案 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将正确呈现,并显示您的警报。