2012-02-29 4 views
6

En este trozo de códigoparámetro de cadena de AjaxOption nulo en Submit pero mostrando en respuesta

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

¿Por qué reconoce mi Javascript Model.IntegerParameter correctamente, pero Model.StringParameter como null? Estoy seguro de que tiene datos sobre ella como puedo comprobar la respuesta y se nota como esta

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

Mi vista del modelo es muy simple y parece que este

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

¿Cómo puedo solucionar esto?

Agregado Información

He intentado cambiar el segundo parámetro a int, ahora es que no pase como null pero 0 y todavía se nota en la respuesta en FireBug.

He añadido el Html.Raw, pero todavía obtiene un valor de null en Javascript.

Aquí es una verdadera pantalla mundo de lo que me pasa en la respuesta de la consola:

enter image description here

--------------- otra actualización ---- --------------

probé todas las sugerencias, pero parece ser un error en MVC s # arp? Intenté en diferentes proyectos y en diferentes PC aún me sucede. Me di cuenta de que esto solo sucede si proviene de un Modelo, parece que sucede entre la respuesta a Javascript, el valor de la cadena se pierde independientemente de si es la primera, segunda o cualquier posición en el parámetro, pero si utilizo un valor codificado, tales como:

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

consigo un resultado exitoso, también si uso jQuery como tales:

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

Esto también funciona, pero si lo hago pasar un modelo que es una cadena como tales

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

Esto no funciona.

Entonces, ¿quieres ver lo que realmente sucede en el mundo real donde tomé en cuenta las sugerencias de @Darin y @Shark. Aquí está una captura de pantalla:

enter image description here

Como se puede ver en la respuesta, que está ahí, pero cuando se pasa a Javascript, se pierde. Esta es la vida real, así Javascript

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); 
    }); 
}, 

Respuesta

0

Parece que un error en S # arp Arquitectura así que en vez de usar el modelo, acabo de utilizar jQuery para extraer el valor que necesitaba como tales

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

Acabo de probar esto con un S # arp Proyecto de arquitectura, y no puedo reproducir el problema. ¿Cómo son los datos publicados cuando obtiene un nulo? –

1

Parece que esto es una cadena codificada en HTML.Trate de hacer esto:

Html.Raw(Model.StringParameter) 

Editar: Prueba esto:

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

Hola, gracias por la respuesta rápida pero todavía no funciona, agregué la captura de pantalla después de agregar Html.Raw – Raymund

+0

@Raymund '& # 39' es el código HTML de un apóstrofo. Está siendo codificado en alguna parte. –

+0

Lo agrego manualmente en myJSFunction ("+ Model.IntegerParameter +", '"+ Model.StringParameter +"') – Raymund

4

No es posible reproducir el problema. Trate de esta manera:

Modelo:

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

controlador:

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> 
} 

Cuando el formulario se envía mediante AJAX, la devolución de llamada éxito myJSFunction se invoca y pasó los valores correctos.

+0

Gracias por esta respuesta, pero aún así obtener un error, por favor consulte mi información actualizada sobre mi pregunta – Raymund

+1

@Raymund, lo he intentado pero no puedo reproducir su problema. Funciona para mí todo el tiempo. –

+0

Eso es extraño, sigue sucediéndome, ¿qué versión de MVC estás usando? De todos modos, gracias por la ayuda y +1 por el esfuerzo de ayudarme. Todavía intentaré encontrar el problema por mi lado y mantener esta publicación actualizada si encuentro lo que está mal – Raymund

0

Su searchString que es nulo probablemente porque de entrada tiene nombre SearchString - la caja de la letra tiene medios.

Cuestiones relacionadas