คุณมีทางเลือกน้อย
ในโมเดลให้เพิ่มแอตทริบิวต์นี้ในแต่ละคุณสมบัติที่คุณต้องอนุญาต 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" ในองค์ประกอบหน้า
<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 เริ่มต้น
Custom ModelBinder
ดูเหมือนว่าการเรียกใช้ bindingContext.ValueProvider.GetValue () ในโค้ดด้านบนจะตรวจสอบความถูกต้องของข้อมูลเสมอโดยไม่คำนึงถึงแอตทริบิวต์ใด ๆ การขุดลงในซอร์ส ASP.NET MVC พบว่า DefaultModelBinder ตรวจสอบก่อนว่าจำเป็นต้องมีการตรวจสอบความถูกต้องจากนั้นเรียกใช้เมธอด bindingContext.UnvalidatedValueProvider.GetValue () พร้อมพารามิเตอร์ที่ระบุว่าจำเป็นต้องมีการตรวจสอบความถูกต้องหรือไม่
น่าเสียดายที่เราไม่สามารถใช้รหัสกรอบงานใด ๆ ได้เนื่องจากมีการปิดผนึกเป็นส่วนตัวหรืออะไรก็ตามเพื่อปกป้องผู้พัฒนาที่เพิกเฉยไม่ให้ทำสิ่งที่เป็นอันตราย แต่ก็ไม่ยากเกินไปที่จะสร้างตัวประสานโมเดลแบบกำหนดเองที่ใช้งานได้ซึ่งเคารพแอตทริบิวต์ AllowHtml และ ValidateInput:
public class MyModelBinder: IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
var theValue = valueProviderResult.AttemptedValue;
}
}
}
ส่วนที่ต้องการอื่น ๆ คือวิธีการดึงค่าที่ไม่ได้ตรวจสอบ ในตัวอย่างนี้เราใช้วิธีการขยายสำหรับคลาส 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/