2013-09-16 3 views
4

У меня есть actionlink на моем представлении, который вызывает действие на контроллере.Предотвращение повторных вызовов к действию при обновлении

@Html.ActionLink("Send Request", "SendRequest", new { id = item.CertificateId }) 

Следующий URL-адрес формируется после нажатия ссылки.

http://localhost:61742/Controller/SendRequest/17 

Теперь, когда я нажимаю обновление, одно и то же действие вызывается снова, вставляя в таблицу повторяющуюся строку. Есть ли способ предотвратить повторные вызовы для моего действия или я должен добавить проверку перед вставкой строки в таблицу.

Я даже попытался изменить свое мнение, чтобы вызвать действие HttpPost, но также снова вызван на обновление.

+0

Он не может быть вызван сам по себе, если вы не вызвали его при загрузке страницы. Если вы измените это, вам будет хорошо. –

+0

Ну, вам следует искать «шаблон PRG». –

ответ

4

Проблема заключается в том, что страница, которую вы обновляете, является вашей страницей Do Action (SendRequest).

Я бы предположил, что ваше действие возвращает перенаправление на исходную страницу или на страницу «спасибо за отправку».

Вы можете сделать это в действии SendRequest (который вы должны держать в HttpPost), например:

[HttpPost] 
public ActionResult SendRequest(int id) 
{ 
    //Do you Send Request logic here 

    //Redirect the user to another page once complete 
    return RedirectToAction("Thanks"); 
} 

, который будет принимать пользователя к URL, как: http://localhost:61742/Controller/Thanks/

Конечно, пользователь все равно может нажать кнопку «Назад» браузера, чтобы вернуться к URL-адресу SendRequest, поэтому я бы посоветовал включить столько же проверки на стороне сервера, сколько вы можете, чтобы предотвратить дублирование записей. Кроме этого, вы не можете сделать так, чтобы пользователь несколько раз щелкнул ссылку «Отправить запрос».

+0

Спасибо, RedirectToAction работает. – HBhatia

0

Во-первых, когда вы украшаете свое действие [HttpPost], браузер должен хотя бы предупредить пользователя перед «обновлением» (повторной отправкой данных).

Обычно перенаправление является самым простым решением проблемы. например:

[HttpPost] 
public ActionResult SendRequest(int id) 
{ 
    .... 

    return Redirect("some_url"); 
} 
Смежные вопросы