ValidationSummary不显示错误

时间:2011-06-30 20:25:59

标签: c# asp.net asp.net-mvc

我有一个收费信用卡的页面。当我尝试为卡充电时,如果我收到错误作为回复,我想重新显示该页面。

这是我的控制器方法:

[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 个答案:

答案 0 :(得分:3)

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

<%: Html.ValidationSummary(false) %>

可以给出空字符串,它将被视为非字段错误。

答案 1 :(得分:2)

添加另一个ValidationMessage输出。

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

并相应地设置错误消息

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