2011-06-30 61 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); %> 

<% } %> 

代码工作正常 - 如果我得到一个错误回来作为响应,该视图重新加载。唯一的问题是验证摘要没有显示错误。

一个奇怪的是,如果我改变AddModelError行:

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

它会显示旁边CreditCardNumber文本框的错误。但是我想在表格下方的摘要中显示错误,因为有时错误可能不是信用卡。

回答

2

添加另一个ValidationMessage输出。

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

,并设置错误消息,因此

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

试试这个(注意冒号)因为它返回MvcHtmlstring:

<%: Html.ValidationSummary(false) %> 

这是确定给空字符串,它会被视为不是现场错误。