首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValidationSummary不显示错误

ValidationSummary不显示错误
EN

Stack Overflow用户
提问于 2011-07-01 04:25:59
回答 2查看 3.4K关注 0票数 1

我有一个向信用卡收费的页面。当我尝试对卡进行充值时,如果得到一个错误作为响应,我希望重新显示页面。

下面是我的控制器方法:

代码语言:javascript
复制
[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
}

我的观点是:

代码语言:javascript
复制
<% 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行改为:

代码语言:javascript
复制
ModelState.AddModelError("CreditCardNumber", response.Message);

它将在CreditCardNumber文本框旁边显示错误。但我想在表单下面的摘要中显示错误,因为有时错误可能与信用卡无关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 04:30:27

添加另一个ValidationMessage输出。

代码语言:javascript
复制
<%= Html.ValidationMessage("GatewayError") %>

并相应地设置错误消息

代码语言:javascript
复制
ModelState.AddModelError("GatewayError", response.Message);
票数 2
EN

Stack Overflow用户

发布于 2011-07-01 04:38:17

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

代码语言:javascript
复制
<%: Html.ValidationSummary(false) %>

提供空字符串是可以的,它将被视为非字段错误。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6540709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档