c# - ValidationSummary doesn't display errors -
i have page charges credit card. when attempt charge card, i'd redisplay page if error response.
here's controller method:
[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, redisplay same view }
and 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); %> <% } %>
the code works correctly - if error response, view reloaded. problem no error displayed validation summary.
one strange thing if change addmodelerror
line to:
modelstate.addmodelerror("creditcardnumber", response.message);
it show error next creditcardnumber textbox. i'd display error in summary below form, error may not credit card.
add validationmessage output.
<%= html.validationmessage("gatewayerror") %>
and set error message accordingly
modelstate.addmodelerror("gatewayerror", response.message);
Comments
Post a Comment