Open mvc view in new window from controller
Solution 1:
This cannot be done from within the controller itself, but rather from your View. As I see it, you have two options:
-
Decorate your link with the "_blank" attribute (examples using HTML helper and straight HMTL syntax)
@Html.ActionLink("linkText", "Action", new {controller="Controller"}, new {target="_blank"})
<a href="@Url.Action("Action", "Controller")" target="_blank">Link Text</a>
-
Use Javascript to open a new window
window.open("Link URL")
Solution 2:
You can use Tommy's method in forms as well:
@using (Html.BeginForm("Action", "Controller", FormMethod.Get, new { target = "_blank" }))
{
//code
}
Solution 3:
You're asking the wrong question. The codebehind (controller) has nothing to do with what the frontend does. In fact, that's the strength of MVC -- you separate the code/concept from the view.
If you want an action to open in a new window, then links to that action need to tell the browser to open a new window when clicked.
A pseudo example: <a href="NewWindow" target="_new">Click Me</a>
And that's all there is to it. Set the target of links to that action.
Solution 4:
Yeah you can do some tricky works to simulate what you want:
1) Call your controller from a view by ajax. 2) Return your View
3) Use something like the following in the success
(or maybe error
! error works for me!) section of your $.ajax request:
$("#imgPrint").click(function () {
$.ajax({
url: ...,
type: 'POST', dataType: 'json',
data: $("#frm").serialize(),
success: function (data, textStatus, jqXHR) {
//Here it is:
//Gets the model state
var isValid = '@Html.Raw(Json.Encode(ViewData.ModelState.IsValid))';
// checks that model is valid
if (isValid == 'true') {
//open new tab or window - according to configs of browser
var w = window.open();
//put what controller gave in the new tab or win
$(w.document.body).html(jqXHR.responseText);
}
$("#imgSpinner1").hide();
},
error: function (jqXHR, textStatus, errorThrown) {
// And here it is for error section.
//Pay attention to different order of
//parameters of success and error sections!
var isValid = '@Html.Raw(Json.Encode(ViewData.ModelState.IsValid))';
if (isValid == 'true') {
var w = window.open();
$(w.document.body).html(jqXHR.responseText);
}
$("#imgSpinner1").hide();
},
beforeSend: function () { $("#imgSpinner1").show(); },
complete: function () { $("#imgSpinner1").hide(); }
});
});