Приложение собирается и работает без ошибок.Когда я пытаюсь отправить форму в режиме отладки, приложение не только не достигает точек останова в коде валидатора, но и возвращается к коду в удаленном файле, который вызывает исключение из-за нулевого объекта.Я очистил все кэши, очистил решение, перестроил решение, перезапустил VS2017, перезагрузил машину, создал решение с использованием нового пользователя, проверил фазу Луны и, похоже, ничего не решило эту проблему.
Iиметь простой валидатор формы следующим образом:
// Аннотация в модели:
[CustomValidator(ErrorMessage = "PIN must not be the same as your phone number.")]
// Файл валидатора
using System;using System.ComponentModel.DataAnnotations;
пространство имен MyWeb.Models {внутренний класс CustomValidator: ValidationAttribute {защищенное переопределение ValidationResult IsValid (значение объекта, ValidationContext validationContext) {
var model = (Model)validationContext.ObjectInstance;
string phone = string.Empty; // break point set here
string PIN = string.Empty;
string last4 = string.Empty;
try
{
phone = model.PrimaryPhone;
PIN = model.PIN;
return ValidationResult.Success; // defaults to always true for testing
}
catch (Exception)
{
throw;
}
}
}
}1016 * Я ожидаю, что правильный код валидатора проверит данные поля и вернет true независимо от введенных значений.
//Server Error in '/' Application.
//Object reference not set to an instance of an object.
//Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
//
//Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
//
//Source Error:
//
//An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
//
//Stack Trace:
//
//
//[NullReferenceException: Object reference not set to an instance of an object.]
// TelemojiWeb.Models.CustomPINValidator.IsValid(Object value, ValidationContext validationContext) in C:\src\TelemojiAll\TelemojiWeb\Models\CustomPINValidator.cs:27
// System.ComponentModel.DataAnnotations.ValidationAttribute.GetValidationResult(Object value, ValidationContext validationContext) +29
// System.Web.Mvc.DataAnnotationsModelValidator.Validate(Object container) +138
// System.Web.Mvc.<Validate>d__1.MoveNext() +237
// System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) +538
// System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +68
// System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +1197
// System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +330
// System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +330
// System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +105
// System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState) +743
// System.Web.Mvc.Async.WrappedAsyncResult`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +14
// System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
// System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +343
// System.Web.Mvc.Controller.<BeginExecuteCore>b__1c(AsyncCallback asyncCallback, Object asyncState, ExecuteCoreState innerState) +25
// System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
// System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
// System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +465
// System.Web.Mvc.Controller.<BeginExecute>b__14(AsyncCallback asyncCallback, Object callbackState, Controller controller) +18
// System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +20
// System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
// System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +374
// System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +16
// System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__4(AsyncCallback asyncCallback, Object asyncState, ProcessRequestState innerState) +52
// System.Web.Mvc.Async.WrappedAsyncVoid`1.CallBeginDelegate(AsyncCallback callback, Object callbackState) +30
// System.Web.Mvc.Async.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +128
// System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +384
// System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48
// System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
// System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +103
// System.Web.<>c__DisplayClass285_0.<ExecuteStepImpl>b__0() +26
// System.Web.StepInvoker.Invoke(Action executionStep) +101
// System.Web.<>c__DisplayClass4_0.<Invoke>b__0() +22
// Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule.OnExecuteRequestStep(HttpContextBase context, Action step) +64
// System.Web.<>c__DisplayClass284_0.<OnExecuteRequestStep>b__0(Action nextStepAction) +54
// System.Web.StepInvoker.Invoke(Action executionStep) +85
// System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +9980101
// System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +159
//
//Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.7.3282.0