2014-10-24 2 views
0

У меня возникли проблемы с попыткой объяснить, почему пользователь смог отправить те же детали формы дважды, сначала я думал, что кнопка отправки была нажата дважды, это все равно может быть так ,Форма, дважды обработанная с помощью MVC Controller Action

Когда я проверяю результаты в базе данных, я вижу, что одна и та же информация была введена дважды, но также была введена одна и та же метка даты и времени, вплоть до второй. (конечно, для повторной отправки требуется еще одна секунда, если это так)

Кроме того, после того, как опрос вводится и сохраняется, пользователь перенаправляется на другую страницу.

У кого-нибудь есть идеи?

[HttpPost] 
public ActionResult InputResult(SurveyViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     Survey_Result InputResult = new Survey_Result(); 

     InputResult.SurveyStatusID = model.SurveyStatusID; 
     InputResult.Q1DateCompleted = DateTime.Now; 
     InputResult.Q2 = model.Q2; 
     InputResult.Q3 = model.Q3; 
     InputResult.Q10 = model.Q10; 
     InputResult.Q11 = model.Q11; 
     InputResult.Q11Other = model.Q11Other; 
     InputResult.DateAdded = DateTime.Now; 
     InputResult.AddedBy = Convert.ToInt32(User.Identity.GetUserId()); 

     _surveyService.AddSurvey(InputResult); 
     _surveyService.Save(); 

     return RedirectToAction("Details", "Survey", new { id = model.SurveyStatusID, feedback = "InputComplete" }); 
    } 

    return RedirectToAction("Details", "Survey", new { id = model.SurveyStatusID, feedback = "InputError" }); 
} 
+0

Довольно легко нажать кнопку дважды за 1 секунду. – DavidG

ответ

-1

Вы уверены, что вам нужны как AddSurvey, так и Save?

Удалить сохранить и повторить попытку.

+1

Зависит от своего класса обслуживания, но я бы предположил, что он ему нужен. – DavidG

1

Код выглядит хорошо для меня. Если у вас есть доступ к пользователю, вы можете нажать Fiddler на него, чтобы увидеть, если он отправляет данные дважды. Если это не происходит все время, то это почти наверняка ошибка пользователя IMHO.

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

У меня были похожие проблемы и javascript на стороне клиента, чтобы отключить кнопку на клике, сделал трюк для меня.

+0

Кажется, что до ошибки пользователя, снова разговаривая с пользователем, они сказали, что страница застыла на пару секунд, чтобы они снова нажали кнопку. Похоже, что javascript на стороне клиента - путь. – Dez79