2015-01-30 4 views
0

У меня есть форма, которую я использую для добавления данных в мою базу данных. Я использую Ajax.BeginForm(), чтобы отправлять данные в контроллер, а затем выполнять хранимую процедуру для сохранения данных. В результате я хочу показать ошибку, если хранимая процедура не сможет добавить данные и перенаправить на другую страницу в другом случае. Поэтому я сделал что-то подобное в своем контроллере.Перенаправление на другую страницу после запроса ajax

if (succees) 
    { 
     return RedirectToAction("ModificationPage", new { id = posted.articleId }); 
    } 
    else 
    ViewData["ErrorMessage"] = msg; 
    return PartialView("_error"); 

_error - это простой частичный просмотр, отображающий сообщение об ошибке. Моя проблема заключается в том, что когда хранимая процедура добавляет данные, а не перенаправляется на страницу модификации, страница модификации считывается внутри представления. Есть ли способ в asp mvc, который может исправить это?

+2

Ajax требует пребывания на той же странице. Если вы хотите перенаправить, просто выполните стандартную отправку (нет никакой реальной пользы в использовании ajax), а затем, если есть ошибка, добавьте ошибку состояния модели и верните представление или перенаправите страницу ошибки. –

+0

@StephenMuecke Это то, что на самом деле используется, но проблема в том, что при возникновении ошибки я должен обновить страницу, и это занимает много времени, и с ajax я просто обновляю небольшую часть страницы – AnotherGeek

+0

Нет вашего нет. Вы используете 'Ajax.BeginForm()', который является ajax-вызовом. Просто используйте 'Html.BeginForm()' и выполните стандартную отправку, если вы хотите перенаправить. –

ответ

0

RedirectToAction не поддерживается в ajax. Вы можете отправить URL-адрес перенаправления клиенту, а от клиента - window.location, чтобы перенаправить на новое место.

1

Вы можете использовать OnSuccess параметр ajaxForm

using(Ajax.BeginForm("action","controlle", 
        new AjaxOptions() { 
         OnSuccess = "mySuccessFunction", 
        })) } 

, а затем в Js

function mySuccessFunction(){ 
    //check if html with error exist on page 
    window.location = "url" 
} 
+0

да, кажется, что js - единственный способ – AnotherGeek

-2

вы можете в controlleur

if (succees) 
    { 
     Redirect("/AREA/ContolleurName/ModificationPage/?Id=" + posted.articleId+ ") 

    } 
    else 
    ViewData["ErrorMessage"] = msg; 
    return PartialView("_error");**strong text** 

и создать действие в вашем conrolleur

public ActionResult ModificationPage(int Id) 
     { 
return //your view 
} 

Или Аякса, как этот

$("class(.test) or Id (#Test)").on("click", function() { 
     var id = $(this).attr('id'); 

     /*Création de la chaine en Json...*/ 

     window.location.href = "/AREA/ContolleurName/ModificationPage?Id=" + id +""; 


    }); 
+0

Невозможно, как это в контроллере, я уже тестирую его – AnotherGeek

+0

показать мне весь ваш код – King

+0

почему я получил голос !!!!! – King

Смежные вопросы