Sie haben einige Möglichkeiten.
Fügen Sie im Modell dieses Attribut zu jeder Eigenschaft hinzu, die Sie benötigen, um HTML zuzulassen - beste Wahl
using System.Web.Mvc;
[AllowHtml]
public string SomeProperty { get; set; }
Fügen Sie in der Controller-Aktion dieses Attribut hinzu, um den gesamten HTML-Code zuzulassen
[ValidateInput(false)]
public ActionResult SomeAction(MyViewModel myViewModel)
Brute Force in web.config - definitiv nicht empfohlen
Fügen Sie in der Datei web.config innerhalb der Tags das Element httpRuntime mit dem Attribut requestValidationMode = "2.0" ein. Fügen Sie außerdem das Attribut validateRequest = "false" in das Element pages ein.
<configuration>
<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
<pages validateRequest="false">
</pages>
</configuration>
Weitere Informationen: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Das Obige funktioniert für die Verwendung des Standard-Modellbinders.
Benutzerdefinierter ModelBinder
Es scheint, dass ein Aufruf von bindingContext.ValueProvider.GetValue () im obigen Code die Daten unabhängig von den Attributen immer überprüft. Das Durchsuchen der ASP.NET MVC-Quellen zeigt, dass der DefaultModelBinder zuerst prüft, ob eine Anforderungsvalidierung erforderlich ist, und dann die Methode bindingContext.UnvalidatedValueProvider.GetValue () mit einem Parameter aufruft, der angibt, ob eine Validierung erforderlich ist oder nicht.
Leider können wir keinen Framework-Code verwenden, da er versiegelt, privat oder was auch immer ist, um ignorante Entwickler vor gefährlichen Dingen zu schützen. Es ist jedoch nicht allzu schwierig, einen funktionierenden benutzerdefinierten Modellordner zu erstellen, der die Attribute AllowHtml und ValidateInput berücksichtigt:
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...
}
}
}
Das andere erforderliche Stück ist eine Möglichkeit, einen nicht validierten Wert abzurufen. In diesem Beispiel verwenden wir eine Erweiterungsmethode für die ModelBindingContext-Klasse:
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);
}
}
Weitere Informationen hierzu finden Sie unter http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/