Obteniendo el error aquí:
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
¿Cómo permito solo una selección de valores? es decir
[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}
Respuestas:
Tienes pocas opciones.
En el modelo, agregue este atributo a cada propiedad que necesite para permitir HTML: la mejor opción
En la acción del controlador, agregue este atributo para permitir todo HTML
Fuerza bruta en web.config: definitivamente no se recomienda
En el archivo web.config, dentro de las etiquetas, inserte el elemento httpRuntime con el atributo requestValidationMode = "2.0". También agregue el atributo validateRequest = "false" en el elemento de páginas.
Más información: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Lo anterior funciona para usos del encuadernador de modelos predeterminado.
ModelBinder personalizado
Parece que una llamada a bindingContext.ValueProvider.GetValue () en el código anterior siempre valida los datos, independientemente de los atributos. Profundizar en las fuentes de ASP.NET MVC revela que DefaultModelBinder primero verifica si se requiere la validación de la solicitud y luego llama al método bindingContext.UnvalidatedValueProvider.GetValue () con un parámetro que indica si la validación es necesaria o no.
Desafortunadamente, no podemos usar ninguno de los códigos del marco porque está sellado, es privado o lo que sea para proteger a los desarrolladores ignorantes de hacer cosas peligrosas, pero no es demasiado difícil crear una carpeta de modelos personalizada que funcione y respete los atributos AllowHtml y ValidateInput:
La otra pieza requerida es una forma de recuperar un valor no validado. En este ejemplo usamos un método de extensión para la clase ModelBindingContext:
Más información sobre esto en http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/
fuente
Tratar:
fuente
var re = request.Unvalidated.Form["ConfirmationMessage"];
Ampliando la respuesta de @DW, en mi controlador de edición, al iterar sobre los valores del formulario, tuve que reemplazar todas las instancias de
Request.Params.AllKeys
conRequest.Unvalidated.Form.AllKeys
y todas las instancias deRequest[key]
conRequest.Unvalidated.Form[key]
.Esta fue la única solución que funcionó para mí.
fuente
Como escribió Mike Godin, incluso si establece el atributo [ValidateInput (false)], debe usar Request.Unvalidated.Form en lugar de Request.Form. Esto funcionó para mí con ASP.NET MVC 5
fuente
Estos son los pasos para codificar a nivel de cliente y decodificarlo a nivel de servidor:
Publique el formulario utilizando el método de envío jquery.
En el botón jquery, haga clic en el campo de codificación del método de evento que desea publicar en el servidor. Ejemplo:
En el nivel del controlador, acceda a todos los valores de identificación del formulario utilizando
Ejemplo de muestra:
Nivel de controlador:
Nivel de cliente:
En la función Documento listo:
fuente