How To Add Errors To ModelState Using The Correct Key
Dec 15, 2010
I want to perform some simple form validation in my controller.
Here's an excerpt from the controller action:
[code]....
It appears that must use a string as the error's key. Is there a way i can generate the corect key from the model, or should I just check for what input name Html.PasswordFor(x => x.NewPassword) returns?
To return a partial view and a form through JSON. It works as it should, but as soon as I get modelstate errors my ValidationSummary does not show. The JSON only return the default form but it does not highlight the validation errors or show the validation summary.
Am I missing something?
This is how I call the RenderPartialToString:
string partialView = RenderPartialToString(this.ControllerContext, "~/Areas/User/Views/Account/ChangeAccountDetails.ascx", new ViewDataDictionary(avd), new TempDataDictionary());
[AddressValidation] public AddressType[] Address { get; set; } internal class AddressValidation : ValidationAttribute { public override bool IsValid(object value) { //Assume we are valid var isValid = true; //Cast to something useful var addresses = (AddressType[])value; var defaultAddresses = addresses.Count(a => a.AddressCode == AddressCodeEnum.@default); if (defaultAddresses == 0) { ErrorMessage = "One address must be the default address"; isValid = false; } else if (defaultAddresses > 1) { ErrorMessage = "Only one address can be the default address"; isValid = false; } //Return the result return isValid; } }
When the model is validated by the controller, any of the subordinate addresses are properly validated and any errors are returned as modelstate errors. However, the custom attribute's error is never added to modelstate, even though it validates false. It seems as if this should work, the validation is called and I can step through it - it just never gets added to modelstate.
for debugging purposes, how do I see the ModelState errors from code in the action method? ModelState.IsValid returns false. I want to copy the error messages to a variable so I can display them in the debugger.
I have a C# web forms ASP.NET 4.0 web application that uses Routing for URLs for some reason custom errors defined in the system.web section of my web.config is entirely ignored and it will fall back the IIS errors.
This gets entirely ignored
[code]....
This would be a minor inconvenience except that by the fact it falls back to IIS native instead of my application it completely circumvents Elmah logging my 404 exceptions correctly.
I am doing a workshop , it has questions, and answers with radiobuttons, I need that when a click is made on a radiobutton a message appears saying that it is correct or it is not correct, how can a do it,
I am using 3 tables and are trying to get the correct info belonging to the correct id. Like this: I go to a page and here i want to see the information from the 3 tables using a specific id.
I have written this so far in a query:
[Code]....
My problem is that the last line does not work and i am uncertain how to make this work? How to write it correctly that is.
When I build my program, if there's one error that prevents it from running, instead of just getting the one error I'll get around 50 additional errors in addition to the real one such as:
Error 27 Validation (XHTML 1.0 Transitional): This name contains uppercase characters, which is not allowed.
I have implemented customised registratio page by extending the membership provider using profile provider.I successfully registered the user .Now i want to validate the fields of registration page.Built-in Registration page has builtin validation messages.
Bu in my coding i am not passing model to the registration action, instead i am passing properties.So if i Use If(ModelState.IsValid) it is always gives true even i am not filling any fields .but after it throws an exception but not displaying error messages in the page.tell me what i have to do.How i am getting my validation messages.
I saw Account Models class in that for register Model built in validation conditions are there.So i am also writing like that for my properties.
I have created a custom validation attribute for a class. The validation is actually against one property of the class, but since it needs to be compared to another property of the class at runtime, I had to pull in everything from the input form, perform the validation and output the errors. This being the case, I manually added a ModelError to ModelState if the ModelStats.IsValid returned false. I have another thread that goes into this, as I still haven't been able to make the client-side validation work for the custom validation (built-in validation runs client-side without a problem).
Here's the issue: I want to use the Post/Redirect/Get pattern to avoid issues where users refresh their page and cause another post of the form data. If I complete my Controller action and return a View after assigning an error with ModelState.AddModelError, I get the user feedback with the red input field and error message shown. However, just returning a View like this makes you vulnerable to the repeated posts issue. I want to use RedirectToAction to perform a get and avoid this problem, but when I do that I no longer have the ModelState error feedback on my rendered View. Here're the calls I'm making:
[Code]....
I'd like to be able to redirect to a get action and retain the ModelState.
I created a Model to do registration on my Website, and add some validations to it. When the user inputs a data, the data will be checked for validity using ModelState.IsValid. But when I input a correct data, it always be invalid. So I decided to debug my program and found that there are an extra key in my ModelState.
For my model, I have UserName, Email, Password, ConfirmPassword, SecretQuestion and SecretAnswer (6 elements)But when I debug, in ModelState, I found 7 elements, they are UserName, Email, Password, ConfirmPassword, SecretQuestion SecretAnswer and the last one is "".I don't know why there is an extra "" in my ModelState, and I checked that it was the source of my error.
I am creating a custom 'control' which is simply made of two html inputs [type=text] but can't figure out how the validation will work on the view end.
I want to treat these 2 inner controls as asingle control so when a error is added to modelstate both of these inputs are highlighted in the view and a single validation message is shown.
I am working in an ASP.NET MVC Application. I have a view model as follows:
[code]....
From UI Perspective user can enter date as mmddyyyy. And when user enters in such format 01012001, my ModelState.IsValid code piece in controller returns false. When I did a quick watch in ModelState, I see an error for the propery "SampleDate", saying "The Value 01012001 is not valid for SampleDate".
In my modelbinder, during the OnModelUpdated event I tried to format the value 01012001 to 01/01/2001 and assigned it back to SampleInterestViewModel.SampleDate thinking that ModelState.IsValid might return true without that error. But still ModelState.IsValid is false and I when I looked in to the ModelState dictionary, this particular property still has that errors in its collection.
Lastly I tried to format 01012001 and update the value 01/01/2001 directly to the Property SampleDate in the ModelState dictionary. But still ModelState.IsValid is false showing the same error for the SampleDate property. Can't figure out why ModelState.IsValid works and how and when it gets set to false.
If the User enter 01012001 in the UI, I still need to format it in the modelbinder to 01/01/2001 and make sure that ModelState.IsValid it true so that the rest of my controller code can work as expected. In the UI I am doing an AjaxSubmit to post the sampleDate value.
Is it necessary to do a ModelState.IsValid check at the top of every action? It seems that it is since the default model binder could make it invalid depending on the action parameters.
I've written a View (form) that has a section with two radio buttons and a blank <DIV> block that will dynamically be updated. When one radio button is clicked, a <DIV> on the page is updated with fields specific to that radio button option. When the other radio button is clicked, the <DIV> on the page is updated with fields specific to that radio button option. To determine what content gets displayed when a radio option is selected, I call a JavaScript function and set the content appropriately using jQuery. Pretty easy so far. Let's assume that the User has toggled the radio buttons and filled in some data. Further down in the form, the User has entered an invalid e-mail address. When the User submits the View, the ModelState is invalid. If it is invalid, I return the View.
[Code]....
Problem is, when the View is returned, some of the form fields (that are static) are in place. However, the <DIV> that was previously updated based on User radio button selections is reset to its original state. When we return a View because of an invalid Model State, is MVC smart enough to return the View in it's modified state (in this case, with the modified DIV and dynamically added content)?
I have used IValidateObject successfully using a strongly typed view using HTML Helpers. When I hand code a view, still using a strongly type view, but no HTML/AJAX helpers, e.g.
[Code]....
Note: I am also handcoding the ajax and validation js.
When I post back to the Controller, even though the model data is correct, the ModelState is always invalid, having delved into the ModelState and found the error, it is always on the Model property where the IValidateObject.Validate is used. If I stop implementing the IValidObject on my model it all works fine, but I lose my IValidObject.Validate validation rules. Is there something I can do about this, what determines and at what point does .NET check validity of the ModelState? Presumably I am missing something that needs to be set on the ModelState and is not happening as I am hand coding the views/js.
I'd like to disable ModelState validation messages and keep my data annotation error messages.
When I update model, message "The value '' is invalid." apears in ModelState. I know that I'm trying to assign null to not nullable property, but I have my own validation and message.
I use something like this
[Required(ErrorMessage="Blahblah some error")]
I want user to see my message "Blahblah some error", but not stupid message: The value '' is invalid.
I've been working with MVC 2 for awhile and ive done ReturnToAction as well as ValidationSummary - but this is a little different in that my "submit" buttons are controls by javascript/JQuery - i debug the action and it does go into the correct Controller Action but once it passes over RedirecToAction, nothing happens....
My second problem is that my ValidationSummary fails to show - i run a test and when it returns a View when ModelState is invalid - nothing shows up
Is it a problem with my buttons/forms/submit/JQuery?
[Code]....
And the Controller looks like this:
[Code]....
My Services handle things like validation, I pass it the ModelState and a ModelStateDictionary wrapper and add errors - am i adding errors incorrectly?