2011-09-01 6 views
6

動作しない戻る:ASP.NET MVC - 私はこのように私のコントローラからいくつかのJavaScriptを返すようにしようと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

私はそれがパターンではありませんが、私のコントローラ(alert();)の定義済みのjavascript関数を呼び出す必要がある場合があります。ありがとう。 – User907863

12

私はJavaScriptResultとして結果を返すときに指定されたJavaScriptが実行されていないと同様の問題がありました。私の場合、JavaScriptコンテンツは<pre>タグ内のテキストとしてレンダリングされていました。

解決方法は、Content()メソッドを使用して、ContentResultとしてJavaScriptを返します。したがって、試してみてください:

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

答えはASP.NETフォーラムで見つかりました。それがこのように行われます理由のより完全な説明については、以下のリンクでブルースの答えを見てください:

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が正しくレンダリングされ、アラートが表示されます。