Domanda

Devo aprire una nuova finestra e impostare il contenuto su tutto ciò che è stato determinato da un post sul mio controller MVC quando si fa clic su un collegamento. Ecco come lo sto facendo attualmente.

jQuery.ajax({
        type: "POST",
        url: '/controller/mycontroller',
        data: { mydata: data },
        error: function (xhr, status, error) {
        },
        success: function (response) {
            win_detail = window.open('', 'name');
            win_detail.document.write(response);
        }
    });

Il controller sta attualmente elaborando ciò che HTML dovrebbe essere sulla pagina e mettendolo nel ViewBag. Sta anche mettendo ciò che la risposta.ContentType dovrebbe essere nel ViewBag. Il mio mycontroller.cshtml ho qualcosa del genere.

@{
Response.ContentType = ViewBag.ContentType;
}

<head></head>
<body>
@ViewBag.MyHtml
</body>

Questo in realtà non imposta il contentType. Qualcuno sa come posso? Posso cambiare tutta la mia struttura in qualunque cosa lo realizzi.

È stato utile?

Soluzione

In assenza di qualche altro motivo, tenterei di utilizzare una richiesta GET e aprire la finestra all'URL indicato.

win_detail = window.open('/controller/action?mydata=' + data, 'name');

A seconda dei dati, potresti aver bisogno di serializzarli in modo diverso.

var form_data = $('form').serialize();
win_detail = window.open( '/controller/action?' + form_data, 'name');

Altri suggerimenti

Invece di trasmettere contenutiType alla vista tramite ViewBag, prova a impostarlo nel controller prima di tornare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top