public override void OnActionExecuted(ActionExecutedContext filterContext) { ControllerBase controller = filterContext.Controller as ControllerBase; if (controller != null) { string serializedModelState = controller.TempData[Key] as string; if (!string.IsNullOrEmpty(serializedModelState)) { IEnumerable<ModelStateWrapper> modelStateWrappers = JsonConvert.DeserializeObject<IEnumerable<ModelStateWrapper>>(serializedModelState, new JsonSerializerSettings() { Error = DeserializationErrorHandler }); if (modelStateWrappers != null) { ModelStateDictionary modelState = new ModelStateDictionary(); foreach (ModelStateWrapper modelStateWrapper in modelStateWrappers) { ModelStateEntry ms = new ModelStateEntry(); ms.ValidationState = modelStateWrapper.ValidationState; ms.AttemptedValue = modelStateWrapper.Value; modelState.Add(modelStateWrapper.Key, ms); } if (filterContext.Result is ViewResult) controller.ViewData.ModelState.Merge(modelState); else controller.TempData.Remove(Key); } } } base.OnActionExecuted(filterContext); }
public void IsValidPropertyReturnsFalse_IfSomeFieldsAreNotValidated() { // Arrange var errorState = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; var validState = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; errorState.Errors.Add("some error"); var dictionary = new ModelStateDictionary() { { "foo", validState }, { "baz", errorState }, { "qux", new ModelStateEntry() } }; // Act var isValid = dictionary.IsValid; var validationState = dictionary.ValidationState; // Assert Assert.False(isValid); Assert.Equal(ModelValidationState.Unvalidated, validationState); }
public void ModelStateDictionary_ClearEntries_KeyHasDot_NonEmptyKey() { // Arrange var dictionary = new ModelStateDictionary(); dictionary["Product"] = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; dictionary["Product.Detail1"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Product.Detail1", "Product Detail1 invalid."); dictionary["Product.Detail1.Name"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Product.Detail1.Name", "Product Detail1 Name invalid."); dictionary["Product.Detail1Name"] = new ModelStateEntry { ValidationState = ModelValidationState.Skipped }; // Act dictionary.ClearValidationState("Product.Detail1"); // Assert Assert.Equal(ModelValidationState.Valid, dictionary["Product"].ValidationState); Assert.Equal(0, dictionary["Product.Detail1"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail1"].ValidationState); Assert.Equal(0, dictionary["Product.Detail1.Name"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail1.Name"].ValidationState); Assert.Equal(ModelValidationState.Skipped, dictionary["Product.Detail1Name"].ValidationState); }
public void ModelStateDictionary_ClearEntriesPrefixedWithKey_NonEmptyKey() { // Arrange var dictionary = new ModelStateDictionary(); dictionary["Product"] = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; dictionary["Product.Detail1"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Product.Detail1", "Product Detail1 invalid."); dictionary["Product.Detail2[0]"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Product.Detail2[0]", "Product Detail2[0] invalid."); dictionary["Product.Detail2[1]"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Product.Detail2[1]", "Product Detail2[1] invalid."); dictionary["Product.Detail2[2]"] = new ModelStateEntry { ValidationState = ModelValidationState.Skipped }; dictionary["Product.Detail3"] = new ModelStateEntry { ValidationState = ModelValidationState.Skipped }; dictionary["ProductName"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("ProductName", "ProductName invalid."); // Act dictionary.ClearValidationState("Product"); // Assert Assert.Equal(0, dictionary["Product"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product"].ValidationState); Assert.Equal(0, dictionary["Product.Detail1"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail1"].ValidationState); Assert.Equal(0, dictionary["Product.Detail2[0]"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail2[0]"].ValidationState); Assert.Equal(0, dictionary["Product.Detail2[1]"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail2[1]"].ValidationState); Assert.Equal(0, dictionary["Product.Detail2[2]"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail2[2]"].ValidationState); Assert.Equal(0, dictionary["Product.Detail3"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Product.Detail3"].ValidationState); Assert.Equal(1, dictionary["ProductName"].Errors.Count); Assert.Equal(ModelValidationState.Invalid, dictionary["ProductName"].ValidationState); }
public static string GetUserErrorMessageOrDefault(ModelError modelError, ModelStateEntry entry) { if (!string.IsNullOrEmpty(modelError.ErrorMessage)) { return modelError.ErrorMessage; } if (entry == null) { return string.Empty; } var attemptedValue = entry.AttemptedValue ?? "null"; return Resources.FormatCommon_ValueNotValidForProperty(attemptedValue); }
public void MarkFieldSkipped_MarksFieldAsSkipped_IfKeyIsNotPresent() { // Arrange var entry = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; var source = new ModelStateDictionary(); // Act source.MarkFieldSkipped("key"); // Assert Assert.Equal(0, source.ErrorCount); Assert.Equal(1, source.Count); Assert.Equal(ModelValidationState.Skipped, source["key"].ValidationState); }
public void RemoveAll_ForImplicitlyCastedToObjectExpression_RemovesModelStateKeys() { // Arrange var state = new ModelStateEntry(); var dictionary = new ModelStateDictionary(); dictionary.Add("Child", state); dictionary.Add("Child.Value", new ModelStateEntry()); // Act dictionary.RemoveAll <TestModel>(model => model.Child.Value); // Assert var modelState = Assert.Single(dictionary); Assert.Equal("Child", modelState.Key); Assert.Same(state, modelState.Value); }
public void GetFieldValidationState_IndexedPrefix_ReturnsValidIfModelStateDoesNotContainErrors(string key) { // Arrange var validState = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; var dictionary = new ModelStateDictionary { { key, validState } }; // Act var validationState = dictionary.GetFieldValidationState("[0].foo"); // Assert Assert.Equal(ModelValidationState.Valid, validationState); }
public void CopyConstructor_CopiesModelStateData() { // Arrange var entry = new ModelStateEntry(); var source = new ModelStateDictionary { { "key", entry } }; // Act var target = new ModelStateDictionary(source); // Assert Assert.Equal(0, target.ErrorCount); Assert.Equal(1, target.Count); Assert.Same(entry, target["key"]); Assert.IsType <Dictionary <string, ModelStateEntry> >(target.InnerDictionary); }
public void RemoveAll_ForSingleExpression_RemovesModelStateKeys() { // Arrange var state = new ModelStateEntry(); var dictionary = new ModelStateDictionary(); dictionary.Add("Key", state); dictionary.Add("Text", new ModelStateEntry()); dictionary.Add("Text.Length", new ModelStateEntry()); // Act dictionary.RemoveAll <TestModel>(model => model.Text); // Assert var modelState = Assert.Single(dictionary); Assert.Equal("Key", modelState.Key); Assert.Same(state, modelState.Value); }
public void MarkFieldValid_MarksFieldAsValid_IfStateIsNotInvalid(ModelValidationState validationState) { // Arrange var entry = new ModelStateEntry { ValidationState = validationState }; var source = new ModelStateDictionary { { "key", entry } }; // Act source.MarkFieldValid("key"); // Assert Assert.Equal(ModelValidationState.Valid, source["key"].ValidationState); }
public void MarkFieldSkipped_MarksFieldAsSkipped_IfStateIsNotInValid(ModelValidationState validationState) { // Arrange var entry = new ModelStateEntry { ValidationState = validationState }; var source = new ModelStateDictionary { { "key", entry } }; // Act source.MarkFieldSkipped("key"); // Assert Assert.Equal(ModelValidationState.Skipped, source["key"].ValidationState); }
public void MarkFieldSkipped_Throws_IfStateIsInvalid() { // Arrange var entry = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; var source = new ModelStateDictionary { { "key", entry } }; // Act var exception = Assert.Throws <InvalidOperationException>(() => source.MarkFieldSkipped("key")); // Assert Assert.Equal( "A field previously marked invalid should not be marked skipped.", exception.Message); }
public void RemoveAll_ForNotModelsExpression_RemovesModelStateKeys() { // Arrange var variable = "Test"; var state = new ModelStateEntry(); var dictionary = new ModelStateDictionary(); dictionary.Add("Key", state); dictionary.Add("variable", new ModelStateEntry()); dictionary.Add("variable.Text", new ModelStateEntry()); dictionary.Add("variable.Value", new ModelStateEntry()); // Act dictionary.RemoveAll <TestModel>(model => variable); // Assert var modelState = Assert.Single(dictionary); Assert.Equal("Key", modelState.Key); Assert.Same(state, modelState.Value); }
public void MarkFieldSkipped_Throws_IfStateIsInvalid() { // Arrange var entry = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; var source = new ModelStateDictionary { { "key", entry } }; // Act var exception = Assert.Throws<InvalidOperationException>(() => source.MarkFieldSkipped("key")); // Assert Assert.Equal( "A field previously marked invalid should not be marked skipped.", exception.Message); }
public void ModelStateDictionary_ClearEntriesThatMatchWithKey_NonEmptyKey() { // Arrange var dictionary = new ModelStateDictionary(); dictionary["Property1"] = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; dictionary["Property2"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Property2", "Property2 invalid."); dictionary["Property3"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Property3", "Property invalid."); dictionary["Property4"] = new ModelStateEntry { ValidationState = ModelValidationState.Skipped }; // Act dictionary.ClearValidationState("Property1"); dictionary.ClearValidationState("Property2"); dictionary.ClearValidationState("Property4"); // Assert Assert.Equal(0, dictionary["Property1"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property1"].ValidationState); Assert.Equal(0, dictionary["Property2"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property2"].ValidationState); Assert.Equal(1, dictionary["Property3"].Errors.Count); Assert.Equal(ModelValidationState.Invalid, dictionary["Property3"].ValidationState); Assert.Equal(0, dictionary["Property4"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property4"].ValidationState); }
public void ModelStateDictionary_ClearsAllEntries_EmptyKey(string modelKey) { // Arrange var dictionary = new ModelStateDictionary(); dictionary["Property1"] = new ModelStateEntry { ValidationState = ModelValidationState.Valid }; dictionary["Property2"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Property2", "Property2 invalid."); dictionary["Property3"] = new ModelStateEntry { ValidationState = ModelValidationState.Invalid }; dictionary.AddModelError("Property3", "Property invalid."); dictionary["Property4"] = new ModelStateEntry { ValidationState = ModelValidationState.Skipped }; // Act dictionary.ClearValidationState(modelKey); // Assert Assert.Equal(0, dictionary["Property1"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property1"].ValidationState); Assert.Equal(0, dictionary["Property2"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property2"].ValidationState); Assert.Equal(0, dictionary["Property3"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property3"].ValidationState); Assert.Equal(0, dictionary["Property4"].Errors.Count); Assert.Equal(ModelValidationState.Unvalidated, dictionary["Property4"].ValidationState); }
public void RemoveAll_ForModelExpression_RemovesModelPropertyKeys() { // Arrange var state = new ModelStateEntry(); var dictionary = new ModelStateDictionary(); dictionary.Add("Key", state); dictionary.Add("Text", new ModelStateEntry()); dictionary.Add("Child", new ModelStateEntry()); dictionary.Add("Child.Text", new ModelStateEntry()); dictionary.Add("Child.NoValue", new ModelStateEntry()); // Act dictionary.RemoveAll<TestModel>(model => model); // Assert var modelState = Assert.Single(dictionary); Assert.Equal("Key", modelState.Key); Assert.Same(state, modelState.Value); }
public void RemoveAll_ForNotModelsExpression_RemovesModelStateKeys() { // Arrange var variable = "Test"; var state = new ModelStateEntry(); var dictionary = new ModelStateDictionary(); dictionary.Add("Key", state); dictionary.Add("variable", new ModelStateEntry()); dictionary.Add("variable.Text", new ModelStateEntry()); dictionary.Add("variable.Value", new ModelStateEntry()); // Act dictionary.RemoveAll<TestModel>(model => variable); // Assert var modelState = Assert.Single(dictionary); Assert.Equal("Key", modelState.Key); Assert.Same(state, modelState.Value); }
public void RemoveAll_ForImplicitlyCastedToObjectExpression_RemovesModelStateKeys() { // Arrange var state = new ModelStateEntry(); var dictionary = new ModelStateDictionary(); dictionary.Add("Child", state); dictionary.Add("Child.Value", new ModelStateEntry()); // Act dictionary.RemoveAll<TestModel>(model => model.Child.Value); // Assert var modelState = Assert.Single(dictionary); Assert.Equal("Child", modelState.Key); Assert.Same(state, modelState.Value); }
public void ValueHelpersDoNotEncodeValue() { // Arrange var model = new TestModel { StringProperty = "ModelStringPropertyValue <\"\">" }; var helper = DefaultTemplatesUtilities.GetHtmlHelper<TestModel>(model); var viewData = helper.ViewData; viewData["StringProperty"] = "ViewDataValue <\"\">"; var modelState = new ModelStateEntry(); modelState.AttemptedValue = "ObjectPropertyAttemptedValue <\"\">"; modelState.RawValue = new string[] { "ObjectPropertyRawValue <\"\">" }; viewData.ModelState["ObjectProperty"] = modelState; // Act & Assert Assert.Equal( "<{ StringProperty = ModelStringPropertyValue <\"\">, ObjectProperty = (null) }>", helper.ValueForModel("<{0}>")); Assert.Equal("<ViewDataValue <\"\">>", helper.Value("StringProperty", "<{0}>")); Assert.Equal("<ModelStringPropertyValue <\"\">>", helper.ValueFor(m => m.StringProperty, "<{0}>")); Assert.Equal("ObjectPropertyRawValue <\"\">", helper.ValueFor(m => m.ObjectProperty, format: null)); }
public void ValueHelpersWithErrorsGetValueFromModelState() { // Arrange var model = new TestModel() { StringProperty = "ModelStringPropertyValue", ObjectProperty = "ModelObjectPropertyValue", }; var helper = DefaultTemplatesUtilities.GetHtmlHelper<TestModel>(model); var viewData = helper.ViewData; viewData["StringProperty"] = "ViewDataValue"; viewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix"; var modelState = new ModelStateEntry(); modelState.AttemptedValue = "StringPropertyAttemptedValue"; modelState.RawValue = new string[] { "StringPropertyRawValue" }; viewData.ModelState["FieldPrefix.StringProperty"] = modelState; modelState = new ModelStateEntry(); modelState.AttemptedValue = "ModelAttemptedValue"; modelState.RawValue = new string[] { "ModelRawValue" }; viewData.ModelState["FieldPrefix"] = modelState; // Act & Assert Assert.Equal("StringPropertyRawValue", helper.Value("StringProperty", format: null)); Assert.Equal("StringPropertyRawValue", helper.ValueFor(m => m.StringProperty, format: null)); Assert.Equal("ModelRawValue", helper.ValueForModel(format: null)); }
private ModelStateEntry CreateValidModelState(string value) { ModelStateEntry modelState = new ModelStateEntry(); modelState.ValidationState = ModelValidationState.Valid; modelState.AttemptedValue = value; return modelState; }
public void DisplayTextFor_IgnoresModelStateEntry() { // Arrange var model = new OverriddenToStringModel("Model value") { Name = "Property value", }; var helper = DefaultTemplatesUtilities.GetHtmlHelper(model); var viewData = helper.ViewData; viewData["Name"] = "View data dictionary value"; viewData.TemplateInfo.HtmlFieldPrefix = "FieldPrefix"; var modelState = new ModelStateEntry(); modelState.RawValue = new string[] { "Attempted name value" }; modelState.AttemptedValue = "Attempted name value"; viewData.ModelState["FieldPrefix.Name"] = modelState; // Act var result = helper.DisplayTextFor(m => m.Name); // Assert Assert.Equal("Property value", result); }
private void HandleViewModelMultilingualProperties(ActionExecutingContext actionExecutingContext) { ViewModelBase viewModel = this.GetViewModelFromActionExecutingContext(actionExecutingContext); if (viewModel == null) return; try { IEnumerable<Culture> cultures = this.Storage.GetRepository<ICultureRepository>().All(); foreach (PropertyInfo propertyInfo in this.GetMultilingualPropertiesFromViewModel(viewModel)) { this.ModelState.Remove(propertyInfo.Name); bool hasRequiredAttribute = propertyInfo.CustomAttributes.Any(ca => ca.AttributeType == typeof(RequiredAttribute)); foreach (Culture culture in cultures) { string identity = propertyInfo.Name + culture.Code; string value = this.Request.Form[identity]; ModelStateEntry modelState = new ModelStateEntry(); if (hasRequiredAttribute && string.IsNullOrEmpty(value)) this.ModelState.Add(identity, this.CreateInvalidModelState(value)); else this.ModelState.Add(identity, this.CreateValidModelState(value)); } } } catch { } }
public void CopyConstructor_CopiesModelStateData() { // Arrange var entry = new ModelStateEntry(); var source = new ModelStateDictionary { { "key", entry } }; // Act var target = new ModelStateDictionary(source); // Assert Assert.Equal(0, target.ErrorCount); Assert.Equal(1, target.Count); Assert.Same(entry, target["key"]); Assert.IsType<Dictionary<string, ModelStateEntry>>(target.InnerDictionary); }