Validações de campo no MVC

Eu gostaria de impor validações de campo em minhas exibições no aplicativo MVC no qual estou trabalhando. Por exemplo –

  • Limitar o comprimento do campo a 40
  • Garanta apenas caracteres alfanuméricos e especiais @ # $% & * () -_ +] [‘;:?.! pode ser inserido.

Eu usei o seguinte para restringir o tamanho do campo:

c.CompanyName, new { style = "width:300px", maxlength = "40" })%>

Como posso garantir que apenas caracteres alfanuméricos e especiais possam ser inseridos nas checkboxs de texto?

EDIT: eu mudei a propriedade no meu modelo para

  [DataMember(EmitDefaultValue = false)] [Required(ErrorMessage="CompanyName is Required")] [StringLength(40, ErrorMessage = "Must be under 40 characters")] public string CompanyName { get; set; } 

Para testar eu tentei salvar um CompanyName em branco na esperança de obter um erro do servidor, uma vez que é necessário. No entanto, ele salva o nome da empresa em branco. Alguma idéia do que pode estar faltando?

Este é o MVC 2.0, mas funciona igualmente bem para o 3.0 http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

Basta olhar para as annotations de dados e fazer algumas validações de modelo

EDITAR:

sua ação do controlador precisará de algo como

 if(ModelState.IsValid) { //success logic } //failure logic //return to view 

você também precisará

 @Html.ErrorMessageFor(model => model.YourProperty) 

para ver as mensagens de erro sendo lançadas.

Leia o artigo que faz um trabalho melhor explicando isso, então qualquer outra pessoa o fará.

Basta criar um object ViewModel assim:

 class Company { [Required] [StringLength(40)] [RegularExpression(@"someregexhere")] public string CompanyName { get; set; } } 

E vincule sua View a esse modelo. Dessa forma, você terá a validação do lado do servidor e do lado do cliente. É muito fácil.

 @model Company @using (Html.BeginForm()) { Html.EditorFor(x => x.CompanyName)  } 

Oh, esse exemplo usa o Razor (MVC3), mas o MVC2 funciona praticamente da mesma maneira que eu sei.

Em seguida, basta validar o ViewModel recebido no seu controlador, verificando ModelState.IsValid.