Pergunta

estou a usar DataAnnotations atributos para validar meus objetos de modelo. Minha classe modelo parece semelhante a isso:

public class MyModel
{
    [Required]
    public string Title { get; set; }

    [Required(ErrorMessage = "At least one editor is required.")]
    public List<User> Editors { get; set; }
}

public class User
{
    public int Id { get; set; }

    [Required]
    public string FullName { get; set; }

    [Required]
    [DataType(DataType.Email)]
    public string Email { get; set; }
}

Minha ação do controlador se parece:

public ActionResult NewItem(MyModel data)
{
    if (!this.Model.IsValid)
    {
        // invalid processing
    }
    // valid processing
}

O usuário é apresentado com uma visão que possui um formulário com:

  • Uma caixa de texto com nome fictício onde os usuários inserem os nomes do usuário. Para cada usuário em que eles entram, há um script de cliente juntamente com Ajax que cria um <input type="hidden" name="Editors[0].Id" value="userId" /> Para cada usuário inserido (o índice de enumeração nem sempre é 0, como escrito aqui), portanto, o Binder padrão do modelo é capaz de consumir e vincular o formulário sem problemas.
  • uma caixa de texto onde os usuários inserem o título

Já que estou usando ASP.NET MVC 2 RTM que modelam a validação em vez de validação de entrada, não sei como evitar erros de validação. E já que os usuários fornecem User.Id, o todo User A instância do objeto está sendo validada. O que não me incomoda, desde que eu saiba como excluir a validação de outras propriedades.

O problema é que tenho que usar BindAttribute na minha ação do controlador. Eu teria que fornecer uma lista branca ou preta de propriedades. É sempre uma prática melhor fornecer uma lista branca. Também é mais uma prova futura.

O problema

Meu formulário funciona bem, mas recebo erros de validação sobre o usuário FullName e Email propriedades, uma vez que não são fornecidas. Também não devo alimentá -los com o cliente (via AJAX quando o usuário inserir dados do usuário), porque o email é dados de contato pessoal e não é compartilhado entre os usuários.

Se houve apenas uma única referência de usuário em MyModel eu escreveria

[Bind(Include = "Title, Editor.Id")]

Mas eu tenho uma enumeração deles. Como eu forneço Bind Lista branca para trabalhar com meu modelo?

Uma solução possível

Eu poderia criar um modelo de visão separado para User Apenas por uma questão de inserir objetos mymodel. Eu colocaria atributos de validação reais e omitia propriedades de que não preciso.

public class MyModelUser
{
    [Required]
    public int Id { get; set; }
}
Foi útil?

Solução

Acabei usando um modelo de exibição separado (como descrito em Uma solução possível na minha pergunta), isso pode ser totalmente validado. É uma solução alternativa e eu ainda gostaria de saber como fazê -lo corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top