2011-06-30 4 views
1

私はクレジットカードに請求するページがあります。カードを請求しようとすると、エラーが返ってきたらページを再表示したいと思います。ValidationSummaryはエラーを表示していません

[HttpPost] 
public ActionResult Charge(CreditCardViewModel viewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     var request = new AuthorizationRequest(viewModel.CreditCardNumber, 
      viewModel.ExpirationDate.Value.ToString("MMyy"), 
      viewModel.Amount.Value, ""); 
     var gate = new Gateway("XXXXXXXXX", "XXXXXXXXX", true); 
     var response = gate.Send(request); 

     if (!response.Approved) 
     { 
      ModelState.AddModelError("", response.Message); 
      return View(viewModel); 
     } 
     else 
     { 
      viewModel.ResponseMessage = response.Message; 
      return View("Results", viewModel); 
     } 
    } 
    return View(viewModel);  // validation error, so redisplay same view 
} 

そして、私のビュー:

はここに私のコントローラメソッドです

<% Html.EnableClientValidation(); %> 
<% using (Html.BeginForm("Charge", "CreditCard", FormMethod.Post)) { %> 

    <div class="editor-label"><%: Html.LabelFor(m => m.CreditCardNumber) %></div> 
    <div class="editor-field"> 
     <%: Html.TextBoxFor(m => m.CreditCardNumber)%> 
     <%: Html.ValidationMessageFor(m => m.CreditCardNumber)%> 
    </div> 

    <div class="editor-label"><%: Html.LabelFor(m => m.ExpirationDate) %></div> 
    <div class="editor-field"> 
     <%: Html.TextBoxFor(m => m.ExpirationDate)%> 
     <%: Html.ValidationMessageFor(m => m.ExpirationDate)%> 
    </div> 

    <div class="editor-label"><%: Html.LabelFor(m => m.Amount) %></div> 
    <div class="editor-field"> 
     <%: Html.TextBoxFor(m => m.Amount)%> 
     <%: Html.ValidationMessageFor(m => m.Amount)%> 
    </div> 

    <div class="buttons"> 
     <input type="submit" value="Charge Amount" /> 
    </div> 

    <% Html.ValidationSummary(false); %> 

<% } %> 

コードが正しく動作する - 私は戻って応答としてエラーを取得した場合、ビューがリロードされます。唯一の問題は、検証サマリでエラーが表示されないことです。

ModelState.AddModelError("CreditCardNumber", response.Message); 

それはCreditCardNumberテキストボックスに次のエラーが表示されます:

一つ奇妙なことは、私はAddModelErrorラインを変更した場合ということです。しかし、エラーがクレジットカードにないことがあるので、フォームの下の要約にエラーを表示したいと思います。

答えて

2

別のValidationMessage出力を追加します。

<%= Html.ValidationMessage("GatewayError") %> 

そして、それはMvcHtmlstringを返すよう(コロンに注意を払う)、これを試してみてくださいそれに応じて

ModelState.AddModelError("GatewayError", response.Message); 
3

エラーメッセージを設定します。

<%: Html.ValidationSummary(false) %> 

を空の文字列を与えることokです、それは意志フィールドエラーではないとみなされます。

関連する問題