2012-09-02 20 views
6

Quiero devolver una vista parcial en Jquery Dailog y quería pasar el objeto viewmodel a una acción de controlador particular, ¿cómo hacerlo?cómo pasar el modelo con Url.Action?

Ver

@Html.DropDownListFor(model => model.SelectedCountry, new SelectList(Model.CountryList, "CountryCode", "CountryName"), "---SELECT COUNTRY---", 
            new { @class = "chosen", @onchange = "this.form.action='/Home/Index'; this.form.submit(); " }) 
<input type="button" id="button1" value="Push"/> 
<div id="dialog" title="Report" style="overflow: hidden;"></div> 

Js

<script type="text/javascript"> 
$(function() { 
    $('#dialog').dialog({ 
     autoOpen: false, 
     width: 400, 
     resizable: false, 
     title: 'Report', 
     modal: true, 
     open: function() { 
      //here how to pass viewmodel 
      $(this).load("@Url.Action("CreatePartial")"); 
     }, 
     buttons: { 
      "Close": function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 

    $('#button1').click(function() { 
     $('#dialog').dialog('open'); 
    }); 
}); 

controlador

public ActionResult CreatePartial(HomeViewModel homeViewModel) 
{ 
     return PartialView("_CreatePartial", homeViewModel); 
} 

Actualmente, "homeViewModel.SelectedCountry" es nulo, ¿cómo pasar el modelo en Jquery?

Respuesta

3

a convertir el modelo en un objeto JSON mediante el uso de la construcción, en el JSON-helper, basta con modificar su solicitud a:

$(this).load('@Url.Action("CreatePartial")',@Html.Raw(Json.Encode(Model))); 

@ Html.Raw se necesita para prevenir HTML-Encoding.

Lo probé y funcionó.

+3

Tenga en cuenta que va a trabajar sólo con los modelos pequeños, como las URL tiene restricción de longitud (al menos en varios navegadores). –

+0

Tiene usted razón, IE es conocido por eso. Gracias por solo agregar el código correspondiente. – developer10214

+0

gracias mucho ... – user584018

4

Si está utilizando AJAX, no debe usar HTTP GET para pasar el modelo al servidor. En su lugar utilizar HTTP POST (como en $().ajax({method: 'POST'}) y pasar los datos como datos POST ($().ajax({method: 'POST', data: @Html.Raw(Json.Encode(Model))}))

Cuestiones relacionadas