2016-05-27 3 views
0

Как получить эту простую форму проверки?Правильная обработка ошибок проверки модели

У меня есть AccountVerificationController, который первоначально имел следующий метод:

public ActionResult Index(AccountVerificationModel model) 

Проблема заключается в том, когда точка зрения изначально загружена, есть ошибки проверки, так как модель требует поля следующим образом:

public class AccountVerificationModel 
    { 
     [Required]   
     public string MerchantId { get; set; } 
     [Required]  
     public string AccountNumber { get; set; } 
     [Required, StringLength(9, MinimumLength = 9, ErrorMessage = "The Routing Number must be 9 digits")] 
} 

Однако это нежелательное поведение. Я хочу, чтобы проверка выполнялась только после того, как пользователь нажимает кнопку подтверждения, поэтому я изменил форму, чтобы вызвать метод Verify в контроллере учетной записи.

Вид выглядит следующим образом;

@using (Html.BeginForm("Verify", "AccountVerification", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h2>@ViewBag.Title</h2> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.SubMerchantId, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.MerchantId, new { htmlAttributes = new { @class = "form-control", placeholder = "MID" } }) 
       @Html.ValidationMessageFor(model => model.MerchantId, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.RoutingNumber, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.RoutingNumber, new { htmlAttributes = new { @class = "form-control", placeholder = "9 Digit Routing Number" } }) 
       @Html.ValidationMessageFor(model => model.RoutingNumber, "", new { @class = "text-danger" }) 
      </div> 
     </div>   

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input name="validate" type="submit" value="Validate" class="btn btn-info"/> 
      </div> 
     </div> 
    </div> 
} 

Теперь проблема заключается в обработке ошибок проверки модели. У меня есть контроллер структурирован следующим образом:

public class AccountVerificationController : BaseMvcController 
{  

    public AccountVerificationController() 
    { 
    }  

     public ActionResult Index() 
     {    
      return View(new AccountVerificationModel()); 
     } 

    public ActionResult Verify(AccountVerificationModel model) 
    { 
     // do the validation then re-direct...... 
     if (!model.IsValid()) 
     { 
      return RedirectToAction("Index", model); 
     } 

     // otherwise try to validate the account 

     if (!model.VerificationSuccessful) 
     { 
      // repopulate the view with this model... 
      return RedirectToAction("Index", model); 
     } 

     return Redirect("Index");   
    } 

Однако во время повторного направления, я теряю весь контекст, ошибку модели и все. Чтение всей этой привязки модели, но если кто-то может быстро определить, что я делаю неправильно здесь, это было бы оценено.

ответ

1

Ну, вы не можете перенаправить, когда есть ошибки. Период. Перенаправление на самом деле является двухэтапным процессом, хотя кажется, что это происходит без видимых на вид. Во-первых, сервер возвращает код состояния 301 или 302 со значением заголовка, указывающим URL-адрес, к которому должен идти клиент. Затем клиент выдает новый запрос на указанный URL. Вот почему никакой контекст не сохраняется. Это в основном то же самое, что и клиент, запрашивающий страницу в первый раз.

Единственный способ сохранить контекст - просто вернуть представление. Это означает, что вашему действию Verify необходимо будет вернуть тот же вид, что и ваше действие Index. Однако это не совсем идеально. Я не совсем понимаю, какова была первоначальная проблема, из-за которой вы решили в первую очередь добавить действие Verify, но это может быть исправлено, если вы откроете новый вопрос в этом отношении. Вы действительно должны просто отправить обратно на свое действие Index.

+0

Исходная проблема возникла при отображении ошибок проверки при первом открытии. Я отправлю новый вопрос. Спасибо. –

+0

Я добавил действие проверки, которое вызывается по почте формы. –

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