У вас є кілька варіантів.
У моделі додайте цей атрибут до кожного властивості, яке вам потрібно, щоб дозволити HTML - найкращий вибір
using System.Web.Mvc;
[AllowHtml]
public string SomeProperty { get; set; }
До дії контролера додайте цей атрибут, щоб дозволити весь HTML
[ValidateInput(false)]
public ActionResult SomeAction(MyViewModel myViewModel)
Груба сила в web.config - однозначно не рекомендується
У файл web.config в теги вставте елемент httpRuntime з атрибутом requestValidationMode = "2.0". Також додайте атрибут validateRequest = "false" в елемент pages.
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
<pages validateRequest="false">
</pages>
</configuration>
Докладніше: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Вищезазначене працює для звичок типового в’яжучого моделей.
Спеціальний ModelBinder
Здається, що виклик bindingContext.ValueProvider.GetValue () у наведеному вище коді завжди перевіряє дані, незалежно від будь-яких атрибутів. Копаючись у джерелах ASP.NET MVC, виявляється, що DefaultModelBinder спочатку перевіряє, чи потрібна перевірка запиту, а потім викликає метод bindingContext.UnvalidatedValueProvider.GetValue () із параметром, який вказує, чи потрібна перевірка чи ні.
На жаль, ми не можемо використовувати будь-який фреймворк-код, оскільки він запечатаний, приватний чи що завгодно, щоб захистити незнаючих розробників від небезпечних дій, але не надто складно створити робочу підшивку власної моделі, яка поважає атрибути AllowHtml та ValidateInput:
public class MyModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// First check if request validation is required
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;
// Get value
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
var theValue = valueProviderResult.AttemptedValue;
// etc...
}
}
}
Інший необхідний фрагмент - це спосіб отримати неперевірене значення. У цьому прикладі ми використовуємо метод розширення для класу ModelBindingContext:
public static class ExtensionHelpers
{
public static ValueProviderResult GetValueFromValueProvider(this ModelBindingContext bindingContext, bool performRequestValidation)
{
var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
return (unvalidatedValueProvider != null)
? unvalidatedValueProvider.GetValue(bindingContext.ModelName, !performRequestValidation)
: bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
}
}
Детальніше про це на веб-сайті http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/