Search Results

Search found 6 results on 1 pages for 'modelstatedictionary'.

Page 1/1 | 1 

  • ASP.NET MVC: ModelState vs. ModelStateDictionary

    - by Alex
    Hello, I have a service which has a method that's called when a certain controller method is triggered. My service returns a custom result object PlacementResult in which I want to communicate errors that may have happened (validation) back to the controller method. Should PlacementResult have a ModelState or a ModelStateDictionary to communicate errors back to the controller (and finally view)? How would I string this together? Finally, how do I get the ModelState/ModelStateDictionary (whichever you tell me I should choose) back into the view (highlighting the appropriate text box, show the error message etc.)? Thank you !

    Read the article

  • How to add request validation errors to ModelStateDictionary in ASP.NET MVC?

    - by Morten Christiansen
    Investigating the security of a system I'm building with ASP.NET MVC 2 led me to discover the request validation feature of ASP.NET - a very neat feature, indeed. But obviously I don't just want to present the users with the Yellow Screen of Death when they enter data with HTML in, so I'm out to find a better solution. My idea is to find all the fields that have invalid data and add them to the ModelStateDictionary before invoking the action such that they automatically appear in the UI as error messages. After googling this a bit it appears that no one have implemented this before which I find puzzling since it seems so obvious. Does anyone here have a suggestion on how to do this? My own idea is to supply a custom ControllerActionInvoker to the controller, as described here, that somehow checks for this and modifies the ModelStateDictionary but I'm stuck on how to do this last bit. Just catching HttpRequestValidationException exceptions does not seem a useful approach since it does not actually contain all the information I need.

    Read the article

  • How do I test ActionFilterAttributes that work with ModelState?

    - by Tomas Lycken
    As suggested by (among others) Kazi Manzur Rashid in this blog post, I am using ActionFilterAttributes to transfer model state from one request to another when redirecting. However, I find myself unable to write a unit test that test the behavior of these attributes. As an example, this what I want the test for the ImportModelStateAttribute to do: Setup the filterContext so that TempData[myKey] contains some fake "exported" ModelState (that is, a ModelStateDictionary I create myself, and add one error to) Make ModelState contain one model error. Call OnActionExecuting. Verify the two dictionaries are merged, and ModelState now contains both errors. I'm at a loss already on the second step.

    Read the article

  • How to pass content in response from Exception filter in Asp.net WebAPI?

    - by jaffa
    Consider following code: My problem is: 1) I can't seem to cast the errors to HttpContent 2) I can't use the CreateContent extension method as this doesn't exist on the context.Response.Content.CreateContent public class ServiceLayerExceptionFilter : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { if (context.Response == null) { var exception = context.Exception as ModelValidationException; if ( exception != null ) { var modelState = new ModelStateDictionary(); modelState.AddModelError(exception.Key, exception.Description); var errors = modelState.SelectMany(x => x.Value.Errors).Select(x => x.ErrorMessage); // Cannot cast errors to HttpContent?? // var resp = new HttpResponseMessage(HttpStatusCode.BadRequest) {Content = errors}; // throw new HttpResponseException(resp); // Cannot create response from extension method?? //context.Response.Content.CreateContent } else { context.Response = new HttpResponseMessage(context.Exception.ConvertToHttpStatus()); } } base.OnException(context); } }

    Read the article

  • How can I unit test my custom validation attribute

    - by MightyAtom
    I have a custom asp.net mvc class validation attribute. My question is how can I unit test it? It would be one thing to test that the class has the attribute but this would not actually test that the logic inside it. This is what I want to test. [Serializable] [EligabilityStudentDebtsAttribute(ErrorMessage = "You must answer yes or no to all questions")] public class Eligability { [BooleanRequiredToBeTrue(ErrorMessage = "You must agree to the statements listed")] public bool StatementAgree { get; set; } [Required(ErrorMessage = "Please choose an option")] public bool? Income { get; set; } .....removed for brevity } [AttributeUsage(AttributeTargets.Class)] public class EligabilityStudentDebtsAttribute : ValidationAttribute { // If AnyDebts is true then // StudentDebts must be true or false public override bool IsValid(object value) { Eligability elig = (Eligability)value; bool ok = true; if (elig.AnyDebts == true) { if (elig.StudentDebts == null) { ok = false; } } return ok; } } I have tried to write a test as follows but this does not work: [TestMethod] public void Eligability_model_StudentDebts_is_required_if_AnyDebts_is_true() { // Arrange var eligability = new Eligability(); var controller = new ApplicationController(); // Act controller.ModelState.Clear(); controller.ValidateModel(eligability); var actionResult = controller.Section2(eligability,null,string.Empty); // Assert Assert.IsInstanceOfType(actionResult, typeof(ViewResult)); Assert.AreEqual(string.Empty, ((ViewResult)actionResult).ViewName); Assert.AreEqual(eligability, ((ViewResult)actionResult).ViewData.Model); Assert.IsFalse(((ViewResult)actionResult).ViewData.ModelState.IsValid); } The ModelStateDictionary does not contain the key for this custom attribute. It only contains the attributes for the standard validation attributes. Why is this? What is the best way to test these custom attributes? Thanks

    Read the article

  • Validation Summary for Lists using Data Annotations with MVC

    - by David Liddle
    I currently use a custom method to display validation error messages for lists but would like to replace this system for using with Data Annotations. In summary on validation of my form, I want to display "*" next to each input that is incorrect and also provide a Validation Summary at the bottom that relates each error message to the particular item in the list. e.g. say if validation failed on the 2nd list item on a Name input box and the 4th item on an Address input box the validation summary would display [2] Name is invalid [4] Address is invalid Please ignore if there are mistakes in the code below. I'm just writing this as an example. The code below shows how I was able to do it using my custom version of adding model errors but was wondering how to do this using Data Annotations? //Domain Object public class MyObject { public int ID { get; set; } public string Name { get; set; } public string Address { get; set; } public bool IsValid { get { return (GetRuleViolations().Count() == 0); } } public void IEnumerable<RuleViolation> GetRuleViolations() { if (String.IsNullOrEmpty(Name)) yield return new RuleViolation(ID, "Name", "Name is invalid"); if (String.IsNullOrEmpty(Address)) yield return new RuleViolation(ID, "Address", "Address is invalid"); yield break; } } //Rule Violation public class RuleViolation { public int ID { get; private set; } public string PropertyName { get; private set; } public string ErrorMessage { get; private set; } } //View <% for (int i = 0; i < 5; i++) { %> <p> <%= Html.Hidden("myObjects[" + i + "].ID", i) %> Name: <%= Html.TextBox("myObjects[" + i + "].Name") %> <br /> <%= Html.ValidationMessage("myObjects[" + i + "].Name", "*")<br /> Address: <%= Html.TextBox("myObjects[" + i + "].Address") %> <%= Html.ValidationMessage("myObjects[" + i + "].Address", "*")<br /> </p> <% } %> <p><%= Html.ValidationSummary() %> //Controller public ActionResult MyAction(IList<MyObject> myObjects) { foreach (MyObject o in myObjects) { if (!o.IsValid) ModelState.AddModelErrors(o.GetRuleViolations(), o.GetType().Name); } if (!Model.IsValid) { return View(); } } public static class ModelStateExtensions { public static void AddModelError(this ModelStateDictionary modelState, RuleViolation issue, string name) { string key = String.Format("{0}[{1}].{2}", name, issue.ID, issue.PropertyName); string error = String.Format("[{0}] {1}", (issue.ID + 1), issue.ErrorMessage); //above line determines the [ID] ErrorMessage to be //displayed in the Validation Summary modelState.AddModelError(key, error); }

    Read the article

1