2012-02-29 10 views
6

In questo pezzo di codicestringa di parametri in AjaxOption nulla su Submit, ma che mostra in risposta

@using (Ajax.BeginForm("MyAction", "MyRouteValues", new AjaxOptions { OnSuccess = "myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')" })) 

Perché il JavaScript riconosce Model.IntegerParameter correttamente, ma Model.StringParameter come null? Sono sicuro che ha i dati su di esso, come posso controllare la risposta e si vede come questo

data-ajax-success="myJSFunction(111111, 'AAAAAA')" 

My View modello

è molto semplice e sembra che questo

public class MyViewModel 
{ 
    public int IntegerParameter { get; set; } 
    public string StringParameter { get; set; } 
} 

Come posso risolvere questo problema?

Aggiunto Info

Ho provato a cambiare il secondo parametro int, ora il suo non passando come null ma 0 e ancora si vede nella risposta in Firebug.

Ho aggiunto Html.Raw, ma ha ancora un valore null in Javascript.

Ecco un vero e proprio screenshot mondo di ciò che ottengo nella risposta console:

enter image description here

--------------- Un altro aggiornamento ---- --------------

ho provato tutti i suggerimenti, ma sembra essere un BUG in MVC s # arp? Ho provato in diversi progetti e su PC diversi succede ancora per me. Ho notato che questo accade solo se proviene da un modello sembra che ciò che accade tra la risposta a Javascript il valore della stringa venga perso indipendentemente dal fatto che sia il primo, il secondo o qualsiasi posizione nel parametro, ma se uso un valore hard coded, come ad esempio:

myJSFunction(" + Model.IntegerParameter + ", 'AAAAAAAA')" 

ottengo un risultato positivo, anche se uso jQuery come tale:

myJSFunction(" + Model.IntegerParameter + ", $('#SearchString').val())" 

Questo funziona anche, ma se lo faccio passare un modello che è una stringa come tali

myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')" 

Questo non funziona.

Quindi vuoi vedere cosa succede realmente nel mondo reale dove ho preso in considerazione i suggerimenti di @Darin e @Shark. Ecco uno screenshot:

enter image description here

Come si vede nella risposta, è lì, ma quando passò a Javascript, si perde. Ecco la vera vita Javascript pure

displayResultsPopUpWindow: function (model) { 
    var postData = { 
     transactionId: model.transactionId, 
     searchString: model.searchString 
    }; 

    $.post("/Invoicing/GetSearchResults", postData, function (data) { 
     WindowHelper.displayWindow("Add Airline Transaction", "<div id='matchBookingResults'>" + unescape(data.viewHtml) + "</div>", 640, 500); 
    }); 
}, 

risposta

0

Sembra un bug in S # arp Architettura così invece di utilizzare il modello, ho solo usato jQuery per estrarre il valore che mi serviva come tali

myJSFunction(" + Model.IntegerParameter + ", $('#SearchString').val())" 
+0

Ho appena provato questo con un arp # S # Progetto di architettura, e non riesco a riprodurre il problema. Che aspetto hanno i dati pubblicati quando si ottiene un valore null? –

1

Sembra che sia una stringa codificata in Html.Prova a fare questo:

Html.Raw(Model.StringParameter) 

Edit: Prova questo:

OnSuccess = Html.Raw("myJSFunction(" + Model.IntegerParameter + ", '" + Model.StringParameter + "')") 
+0

Ciao grazie per la risposta rapida bu ancora non funziona, ho aggiunto lo screenshot dopo aver aggiunto Html.Raw – Raymund

+0

@Raymund '& # 39' è il codice HTML del codice per un apostrofo. Sta diventando codificato da qualche parte. –

+0

Aggiungo manualmente a myJSFunction ("+ Model.IntegerParameter +", "" + Model.StringParameter + "') – Raymund

4

Impossibile riprodurre il problema. Prova in questo modo:

Modello:

public class MyViewModel 
{ 
    public int IntegerParameter { get; set; } 
    public string StringParameter { get; set; } 
} 

Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel 
     { 
      IntegerParameter = 1111, 
      StringParameter = "AA'AA\"AA" 
     }); 
    } 

    [HttpPost] 
    public ActionResult MyAction() 
    { 
     return Json(new { foo = "bar" }); 
    } 
} 

Vista:

@model MyViewModel 

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    var myJSFunction = function (model) { 
     alert('intParam=' + model.intParam + ', strParam=' + model.strParam); 
    }; 
</script> 

@using (Ajax.BeginForm(
    "MyAction", 
    "Home", 
    new AjaxOptions 
    { 
     OnSuccess = "myJSFunction(" + Json.Encode(new { intParam = Model.IntegerParameter, strParam = Model.StringParameter }) + ")" 
    } 
)) 
{ 
    <button type="submit">OK</button> 
} 

quando il modulo viene inviato utilizzando AJAX, il callback successo myJSFunction viene richiamato e passato i valori corretti.

+0

Grazie per questa risposta, ma ancora ottenere un errore si prega di vedere le mie informazioni aggiornate sulla mia domanda – Raymund

+1

@ Raymond, ho provato ma non sono in grado di riprodurre il problema. Funziona sempre per me. –

+0

Questo è strano, continua a succedere su di me, quale versione MVC stai usando? Comunque grazie per l'aiuto e +1 per lo sforzo di aiutarmi. Cercherò comunque di trovare il problema sulla mia estremità e di tenere aggiornato questo post se ho trovato che c'è torto – Raymund

0

tuo searchString è nullo probabilmente a causa di ingresso ha il nome SearchString - il caso della lettera ha mezzi.

Problemi correlati