Imposta contentType della nuova finestra aperta in JavaScript seguendo MVC Post
-
29-10-2019 - |
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.
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.