私はクレジットカードに請求するページがあります。カードを請求しようとすると、エラーが返ってきたらページを再表示したいと思います。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
ラインを変更した場合ということです。しかし、エラーがクレジットカードにないことがあるので、フォームの下の要約にエラーを表示したいと思います。