2012-04-29 7 views
8

Estoy tratando de devolver la cadena HTML generada a la vista para generar dinámicamente una tabla HTML con resultados. No puedo obtener la cadena HTML devuelta ninguna sugerencia y la ayuda es muy apreciada.¿Cómo puedo devolver el HTML del controlador MVC a un div en mi vista?

Aquí está mi código Controlador

public ActionResult ValidateTrams() 
    { 
     string html = ""; 
     if (Request.Files.Count == 0 || Request.Files[0].ContentLength == 0) 
     { 
     } 

     else 
     { 
      html = ProcessTextFile(Request.Files[0].InputStream); 
     } 

     return View(html); 
    } 

Estoy tratando de apoderarse de este resultado devuelto en jQuery como esto

$('#tramsView').live('click', function() { 

$.ajax({ 
    url: '/Booking/ValidateTrams', 
    type: 'POST', 
    dataType: 'jsonp', 
    success: function (data) { 
     alert(data); 
     $('#TramsViewFrame').html(data); 
    }, 
    error: function (jqxhr, textStatus, errorThrown) { 
     $(window).hideWaitScreen(); 
     if (confirm(errorThrown)) { window.location.reload(); } 
    } 
}); 

});

Finalmente A continuación se muestra el CSHTML del formulario. Aquí estoy leyendo un archivo de un formulario con un tipo de botón enviar

<form action="#" method="post" enctype="multipart/form-data" class="forms" name="form" 
      id="frmvalidate"> 
      <table> 
       <tr> 
        <td> 
         <input type='file' name='trams' id='ValidatetramsFile' /> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <br /> 
         <input name="cbDisplayUmatched" id="cbDisplayUmatched" type="checkbox" value="" checked="true" /> 
         <label style="text-decoration: none; outline: none; font-size: 1.1em; padding: 3px 0 0px 0;"> 
          Display rows that were <strong>NOT</strong> parsed</label> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         <br /> 
         <div class="buttons"> 
          <button type="submit" value="VIEW" class="ui-state-default ui-corner-all" id="tramsView">VIEW</button> 
         </div> 
        </td> 
       </tr> 
      </table> 
      </form> 

Gracias por su tiempo y realmente agradezco su ayuda. ¡¡¡Saludos cordiales!!!

Respuesta

4

Parece que su formulario todavía está enviando una devolución de datos normal, por lo que se perderán todas las llamadas asíncronas que esté haciendo.

Intenta prevenir el envío del formulario predeterminado que tiene lugar a lo siguiente:

$('#tramsView').live('click', function (evt) { 

    evt.preventDefault(); 

    // ... rest of your code 

}); 

Por cierto, en este caso, si todo lo que estamos haciendo es actualizar el código HTML en su #TramsViewFrame, usted podría utilizar el poco más sencillo $.load() método:

$('#tramsView').live('click', function (evt) { 
    evt.preventDefault(); 
    $('#TramsViewFrame').load('/Booking/ValidateTrams'); 
}); 
14

puede volver HTML de acción como esta,

return Content(html, "text/xml"); 
+0

Gracias por la respuesta Jayantha, probé esto y recibí una respuesta, pero borré mis otros controles en la página. ¿Cómo puedo hacer esto si quiero cargar este resultado parcialmente en un div –

+0

llamarlo usando ajax .. –

+0

Me temo que "text/xml" funcionaría. Quizás quisiste decir el tipo de letra "text/html" :) –

1

En su controlador dado que está utilizando Ajax después de que necesite devolver como JSON sería algo como esto

return Json(html); 
3

Realice estos cambios

Dale el atributo HttpPost en la parte superior de su controlador

[HttpPost] 
public ActionResult ValidateTrams() 

retorno la cadena como JSON así desde el controlador.

return Json(new { success = html }); 

Finalmente cambiar su tipo de datos en jsonp a json

$('#tramsView').live('click', function() { 
    $.ajax({ 
     url: '/Booking/ValidateTrams', 
     type: 'POST', 
     dataType: 'json', 
     success: function(data) { 
      alert(data.success); 
      $('#TramsViewFrame').html(data.success); 
     }, 
     error: function(jqxhr, textStatus, errorThrown) { 
      $(window).hideWaitScreen(); 
      if (confirm(errorThrown)) { 
       window.location.reload(); 
      } 
     } 
    }); 
});​ 

P.S: Si está utilizando la última versión de jQuery (1.7+), por favor, cambie el controlador .live a .on manejador. No obligatorio :)

0

en lugar de almacenar en los códigos html tienda de "cadena" en formato siguiente:

 HtmlString s = new HtmlString("<html coding/>"); 
     ViewData["Id_as_per_your_choice"] = s; 
     return View("page_you_want to_respond"); 

luego coloque "<%: ViewData [" Id_Same_as_that_in_above_code "]%>" donde quiera que quiera que aparezca ese código html ...... simple ..... pero haga que el valor inicial de Viewdata sea nulo en " método de índice() para que el código no aparezca en la carga de la página ...

Cuestiones relacionadas