1

Я хотел бы, как реализовать проверку на стороне клиента для потенциально опасного request.form в asp.net mvc.проверка на стороне клиента для asp.net mvc «потенциально опасный Request.Form ...

В этом случае я не хочу устанавливать [ValidateInput(false)], и пользователь не может отображать эту страницу сообщения об ошибке. Что-то вроде атрибута [Required] для проверки на стороне клиента.

Я предположил, что для этого есть встроенная функция, поскольку для меня это является общей проблемой, но мне кажется, что я не могу ее найти.

+0

Для подтверждения на стороне клиента потребуется код на стороне клиента. Я бы порекомендовал использовать jQuery и плагин jQuery Validate: http://jqueryvalidation.org/ – StaticVoid

+0

Мне известно о широком диапазоне проверки на стороне клиента javascript, доступной там, но проблема, с которой я столкнулся, заключается не в том, чтобы изобретать колесо для переписывая правило проверки, которое соответствует потенциально опасному запросу request.form asp.net mvc, ни для ограничения ввода, чтобы разрешать только буквенно-цифровые – stackdisplay

+0

. На самом деле не имеет смысла говорить об эквивалентности проверки на стороне клиента, поскольку это выходит за рамки простого проверка формы. URL-адреса запросов, файлы cookie и т. Д. Также проверяются с помощью проверки запроса ASP.NET, поэтому вам, вероятно, придется реализовать свой собственный JavaScript, который перехватывает каждое сообщение формы и проверяет весь HTTP-запрос до его отправки. Вы уверены, что это действительно то, что вам нужно сделать? Проверка запроса - это функция безопасности, а не юзабилити, поэтому ошибки проверки запроса должны действительно рассматриваться как исключения, а не ошибки проверки формы. –

ответ

3

Вы можете поймать HttpRequestValidationException во время привязки модели, переопределив метод DefaultModelBinder.BindModel.

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     try 
     { 
      return base.BindModel(controllerContext, bindingContext); 
     } 
     catch (HttpRequestValidationException) 
     { 
      bindingContext.ModelState.AddModelError(bindingContext.ModelName, "Illegal Html characters..."); 
      return null; 
     } 
    } 

В действии вашего контроллера вы можете проверить, не является ли модель недопустимой, и повторно отобразить представление по мере необходимости. jQuery ненавязчивая валидация должна заботиться обо всем остальном.

[HttpPost] 
    public virtual ActionResult Edit(ViewModel model) 
    { 
     if (!ModelState.IsValid) 
     {        
      return View(model); 
     } 
    } 

Если вы уже не имеете обычай DefaultModelBinder вам придется убедиться, чтобы зарегистрировать его при запуске приложения.

ModelBinders.Binders.DefaultBinder = new CustomDefaultModelBinder(); 
Смежные вопросы