So I have an MVC Action in my controller
public System.Web.Mvc.ActionResult Link(LinkType type)
{
switch (type)
{
case LinkType.IC:
return RedirectToAction("Indication", "IndicationsController");
break;
case LinkType.Pricing:
break;
case LinkType.Sheets:
break;
case LinkType.Analysis:
break;
case LinkType.Admin:
break;
default :
break;
}
return View(@"~\Views\Indications\ShowAString.aspx", "", "Page is not available for selection.");
}
I want to call this action from JQuery passing the integer value of the button that was clicked. So I have this in my button click method:
$('#btnIc').live('click', function () {
var typeJSON = {};
typeJSON["type"] = 1;
$.ajax({
type: "POST",
url: "<%= Url.Action("Link", "Home") %> ",
dataType: "jsonData",
data: typeJSON,
success: function(data) {
}
});
});
Will this redirect the page or will it be waiting for me to do something with (data)?
Is this the correct way to do this?
Returning an entire view in an AJAX request is almost always not the way to go. Instead you want to return XML, JSON or a chunk of HTML. You can return a chunk of HTML by returning a partial by calling
PartialView()in the Controller.If you are returning HTML, then your jQuery AJAX request needs to be expecting it, so change its dataType to
html. Then in the jQuery callback you can just take the received HTML and append it to your page somewhere.NOTE: you can use
Request.IsAjaxRequest()to return either AJAX data or a full view, and use the same action for both kinds of requests. This helps with progressive enhancement.