2011-09-01 21 views
6

Se provo a tornare un po 'JavaScript dal mio controller in questo modo:ASP.NET MVC - Tornando JavaScriptResult non funziona

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

non mi visualizzare il messaggio di avviso nel browser, ma ottengo un download richiesta di uno script .js dalla pagina denominata come azione (register.js nel mio caso). Che c'è?

+0

Come stai chiamando la tua azione? Inoltre, si tenga presente che questo è generalmente considerato un [anti-pattern] (http://devlicio.us/blogs/billy_mccafferty/archive/2009/02/07/beware-of-asp-net-mvc-javascriptresult.aspx) . – R0MANARMY

risposta

2

provare il seguito.

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

Non tornerò Javascript, sarei tornato Content, quindi nella pagina, vorrei convertire che il contenuto ad una segnalazione:

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

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

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

I kown è anti-pattern, ma a volte ho bisogno di chiamare una funzione javascript definita dal mio controller (l'alert(); è stato un esempio). Grazie. – User907863

12

Ho avuto un problema simile con il JavaScript specificato non esecuzione al ritorno il risultato come JavaScriptResult. Nel mio caso, il contenuto JavaScript veniva visualizzato come testo all'interno dei tag <pre>.

La soluzione è restituire il codice JavaScript come ContentResult, utilizzando il metodo Content(). Quindi prova:

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

Ho trovato la risposta nei forum ASP.NET. Dai un'occhiata alla risposta di Bruce al seguente link per una spiegazione più completa del perché viene fatto in questo modo:

Return JavascriptResult Not Working

+0

grazie! questo funziona quando si richiama ActionMethod direttamente dalla barra degli indirizzi del browser, che è ciò che dovevo fare. –

3

Se è necessario restituire un codice js utilizzando JavaScriptResult, tenere a mente che la vostra azione dovrebbe essere chiamato tramite una chiamata Ajax. Chiamando questa azione tramite Html.Actionlink o altri controlli direttamente, risulta mostrare il testo dello script invece di eseguire lo script. Quindi è necessario aggiungere un codice js nella vista:

<script type="text/javascript"> 
    $(function() { 
      $('#myButtonId').click(function() { 
       $.getScript("/MyController/DoSomething"); 
      }); 
    }); 
</script> 

e la vostra azione in MyController:

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

Quando si sta chiamando la vostra azione dal punto di vista, assicurarsi di utilizzare @Ajax.ActionLink al posto del Metodo di supporto @Html.ActionLink. Il JavaScript verrà quindi visualizzato correttamente e verrà visualizzato l'avviso.

Problemi correlati