2011-09-01 29 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將正確渲染,並顯示您的警報。