Estoy tratando de subir un objeto JSON (JSON-ified modelo de octavos de final, si que es de alguna importancia) a mi controlador MVC, y tiene el controlador de volver de un nuevo punto de vista. Para hacer esto, yo soy el envío de los datos con un formulario. El problema es que me gustaría tener el JSON que se convierte automáticamente en un modelo cuando el controlador recibe.

Si yo fuera a utilizar una llamada AJAX para esto,

var actionModel = new Object();
actionModel.Controls = ko.toJS(self.controls());
var json = JSON.stringify(actionModel);
$.ajax({
    url: "MyController/Preview",
    type: "POST",
    contentType: 'application/json; charset=utf-8',
    cache: false,
    data: json,
    success: function (data) {
    }
});

…el objeto JSON con éxito deserializa y se convierte en una instancia de mi clase del modelo.

public ActionResult Preview(ActionModel actionModel) { ... }
public class ActionModel
{
    public List<ControlModel> Controls { get; set; }
}

Si quiero hacerlo con un formulario, entiendo que tengo que insertar el JSON en un oculto campo de entrada, pero lo mejor que puedo manejar a la hora de hacer esto es para recibir los datos como una cadena serializada:

@using (Html.BeginForm("Preview", "MyController", FormMethod.Post, new { id = "previewForm" }))
{
    <input type="hidden" id="hiddenFieldName" />
}

public ActionResult Preview(string hiddenFieldName) { ... }

Yo sólo podía deserializar después, pero yo realmente preferiría que si MVC podría convertir para mí, como lo haría con una llamada AJAX. Es esto posible?

Gracias.

OriginalEl autor Alejo | 2012-11-02

2 Comentarios

  1. 2

    Suponiendo que se desee publicar datos codificados como json mediante un formulario y no XHR, yo no creo que sea fuera de la caja sea posible.

    Formas no permiten muchos tipos de contenido. http://www.w3.org/TR/html401/interact/forms.html#form-content-type

    Si después de json como una cadena, probablemente lo posible para crear un cuaderno de modelo que busca cadenas que parecen ser json y lidiar con la serialización de allí. No es la cosa más linda, especialmente si esto es solo para algunos fuera una extraña situación.

    Gracias por el aporte. Creo que voy a enviar una cadena de texto. No es el fin del mundo como lo puedo devolver el mismo JSON de vuelta en la nueva página, pero tenía la esperanza de que podría hacer la vista previa de la acción en consonancia con el resto de mi controlador.

    OriginalEl autor Kenneth Ito

  2. 0

    Lugar de el manual de la deserialización, se puede coger la forma después del evento y reconstruir su propio post, añadiendo el adicional de un objeto JSON. Aquí es un ejemplo que utiliza la serializeObject método de este post):

    $(document).ready(function () {
        $('form').live('submit', function (e) {
            e.preventDefault();
    
            var dataToPost = $(this).serializeObject();
            dataToPost.hiddenFieldName = actionModel; //additional object here
            $.ajax({
                type: $(this).attr('method'),
                url: $(this).attr('action'),
                data: JSON.stringify(dataToPost),
                contentType: 'application/json; charset=utf-8',
                success: function (res) {
                    //do something...
                }
            });
        });
    });
    No puedo interceptar y reconstruir la forma de la petición post, ya que tengo la necesidad de que los datos se envían de forma síncrona con el controlador. E. g. Formulario envía los datos -> controlador recibe los datos (idealmente serializado en mi clase de modelo) -> controlador devuelve los datos en una nueva página web.

    OriginalEl autor Johann

Dejar respuesta

Please enter your comment!
Please enter your name here