У меня есть кнопка devexpress, на мой взгляд, которая работает только с javascript. Поэтому мне нужно вызвать действие через это событие click.
Мой сценарий:
function OnCommandExecuted(s, e) {
if (e.item.name == "SendData") {
$.post("/Product/ExportData");
}
}
Когда я нажимаю на эту кнопку, Action/Product/ExportData выполняется, но ничего мне не возвращает. Мои действия:
public ActionResult ExportData()
{
return RedirectToAction("Test");
}
public ActionResult Test()
{
return RedirectToAction("Login", "Account");
}
Таким образом, оба действия выполняются, но сайты не изменяются в соответствующее представление. Он остается на исходном изображении, где была нажата кнопка.
как я могу перейти к соответствующему виду действия?
Вызов AJAX не может сделать переадресацию браузера по умолчанию. Вместо перенаправления на сервере отправьте URL-адрес как JSonResult и используя JQuery на стороне клиента, поймайте этот URL-адрес и выполните перенаправление, как показано ниже:
Пусть действие вашего контроллера возвращает Json, как показано ниже -
public ActionResult GetJson()
{
return new JsonResult() { Data = "http://www.google.com",JsonRequestBehavior = JsonRequestBehavior.AllowGet };
}
Затем вызовите это действие контроллера из JQuery, как показано ниже:
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
function submitForm() {
jQuery.ajax({
type: "POST",
url: "@Url.Action("GetJson")",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
window.location.href = data;
},
failure: function (errMsg) {
alert(errMsg);
}
});
}
</script>
<input type="button" value="Click" onclick="submitForm()" />
Поэтому, когда вы нажимаете кнопку, будет выполняться операция POST для действия контроллера, а возвращаемый URL-адрес будет зависеть от функции Success. Затем, используя window.location.href, мы делаем перенаправление браузера.
РЕДАКТИРОВАТЬ
Один из способов построения URL -
UrlHelper h = new UrlHelper(ControllerContext.HttpContext.Request.RequestContext);
string str = h.Action("action", "controller", null);
return new JsonResult() { Data = str,JsonRequestBehavior = JsonRequestBehavior.AllowGet };
В качестве альтернативы в то же время вы можете использовать класс Uri в С#