Obtendo o erro aqui:
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
Como posso permitir apenas uma seleção de valores? ie
[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}
Respostas:
Você tem poucas opções.
No modelo, adicione este atributo a cada propriedade que você precisa para permitir HTML - melhor escolha
Na ação do controlador, adicione este atributo para permitir todo o HTML
Força bruta em web.config - definitivamente não recomendado
No arquivo web.config, dentro das tags, insira o elemento httpRuntime com o atributo requestValidationMode = "2.0". Adicione também o atributo validateRequest = "false" no elemento pages.
Mais informações: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
O acima funciona para usos do modelbinder padrão.
Custom ModelBinder
Parece que uma chamada para bindingContext.ValueProvider.GetValue () no código acima sempre valida os dados, independentemente de quaisquer atributos. Investigar as fontes ASP.NET MVC revela que o DefaultModelBinder primeiro verifica se a validação da solicitação é necessária e, em seguida, chama o método bindingContext.UnvalidatedValueProvider.GetValue () com um parâmetro que indica se a validação é necessária ou não.
Infelizmente, não podemos usar nenhum código do framework porque ele é selado, privado ou qualquer outra coisa para proteger desenvolvedores ignorantes de coisas perigosas, mas não é muito difícil criar um fichário de modelo personalizado funcional que respeite os atributos AllowHtml e ValidateInput:
A outra parte necessária é uma forma de recuperar um valor não validado. Neste exemplo, usamos um método de extensão para a classe ModelBindingContext:
Mais informações sobre isso em http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/
fonte
Experimentar:
fonte
var re = request.Unvalidated.Form["ConfirmationMessage"];
Expandindo a resposta de @DW, em meu controlador de edição, na iteração sobre os valores do formulário, tive que substituir todas as instâncias de
Request.Params.AllKeys
comRequest.Unvalidated.Form.AllKeys
e todas as instâncias deRequest[key]
comRequest.Unvalidated.Form[key]
.Essa foi a única solução que funcionou para mim.
fonte
Como Mike Godin escreveu, mesmo se você definir o atributo [ValidateInput (false)], você deve usar Request.Unvalidated.Form em vez de Request.Form Isso funcionou para mim com a ASP.NET MVC 5
fonte
Aqui estão as etapas para codificar no nível do cliente e decodificá-lo no nível do servidor:
Publique o formulário usando o método jquery submit.
No botão jquery, clique no campo de codificação do método do evento que você deseja postar no servidor. Exemplo:
No nível do controlador, acesse todos os valores de id de formulário usando
Exemplo de amostra:
Nível do controlador:
Nível do cliente:
Na função Document Ready:
fonte