ASP.NET MVC 2 Modelo Ligação: Como depurar uma ligação de modelo parcialmente com falha na postagem?

StackOverflow https://stackoverflow.com/questions/3406967

  •  25-09-2019
  •  | 
  •  

Pergunta

Tivemos um modelo de visualização que parecia assim:

public class myViewModel {
    public Contract contract {get;set;}
    public Vendor vendor {get;set;}
}

public class Contract {
    public int contractID {get;set;}
    // ... various string properties
    public IList<ContractDetail> contractDetails {get;set;}
    pubilc Vendor vendor {get;set;}
}

Voltar do formulário foi o contrato concluído.

[HttpPost]
public ActionResult Edit(Contract contract) { ... }

Tudo funcionou de acordo com os valores de postagem para as propriedades do parâmetro do contrato.

Quando transferimos o fornecedor para contratar como um objeto de valor, todas as propriedades "primitivas" do primeiro nível do contrato falham em vincular. Todas as propriedades iList <> são boas.

Alguma idéia ou que mais informações precisaríamos resolver esse enigma? Existe alguma maneira de testar como o MVC liga os valores de forma de volta aos parâmetros do objeto? A solução tem algo a ver com o fornecedor não ser um ilista, ou seja, por que as propriedades ilistas funcionariam bem?

Editar:

A correção era especificar absolutamente os nomes de hierarquia de objetos em todos os campos, por exemplo, para o nome do fornecedor vincular, exigia um nome de "contrat.vendor.name". Esse prefixo foi feito para nós usando o ViewModel, mas não foi feito para usar o modelo de contrato. Acabamos fazendo isso para todos os modelos de exibição (visualizações parciais):

EditorFor(m => m.vendor, "Vendor", "Contract.vendor")

Onde "fornecedor" é o nome do editorTemplate "vendor.ascx" e "contrat.vendor" prefixam todos os nomes de campo de formulários.

Eu acho que, como o ViewModel aninhou todos os dados, fez com que o MVC prefixasse todas as propriedades corretamente. Isso significaria que os campos de forma "soltos" não qualificados por prefixos de objetos não se ligarão aos objetos de parâmetro nomeados.

Foi útil?

Solução

Basta baixar o Código fonte do MVC , Faça uma referência do projeto e depure o fichário padrão.

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