我有一个向信用卡收费的页面。当我尝试对卡进行充值时,如果得到一个错误作为响应,我希望重新显示页面。
下面是我的控制器方法:
[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文本框旁边显示错误。但我想在表单下面的摘要中显示错误,因为有时错误可能与信用卡无关。
发布于 2011-07-01 04:30:27
添加另一个ValidationMessage输出。
<%= Html.ValidationMessage("GatewayError") %>并相应地设置错误消息
ModelState.AddModelError("GatewayError", response.Message);发布于 2011-07-01 04:38:17
试试这个(注意冒号),因为它返回MvcHtmlstring:
<%: Html.ValidationSummary(false) %>提供空字符串是可以的,它将被视为非字段错误。
https://stackoverflow.com/questions/6540709
复制相似问题