Pergunta

Estou tentando encontrar alguns exemplos de construção de um fichário personalizado para um cenário de ligação exclusivo que preciso lidar, mas todos os artigos que encontrei foram para versões mais antigas do MVC que não são mais relevantes no MVC2. Eu tenho referenciado o código -fonte DefaultModelBinder para tentar obter uma sensação geral do que preciso fazer, mas é totalmente mais complicado do que meu cenário e estou tendo problemas para isolar a lógica específica que preciso implementar.

Meu objetivo é pegar uma coleção de pares de caixa de seleção/caixa de texto e, para todos os pares verificados, gostaria de criar um par de chave/valor do valor da caixa de seleção e o valor da caixa de texto associado. Depois de agregar esses dados, preciso fazer alguma serialização de string na coleção para que eu possa armazená -los em uma propriedade String do tipo de modelo desejado. Eu já os dados enviados do formulário em um formato gerenciável que me permitirão relacionar uma determinada caixa de seleção a uma caixa de texto específica, é apenas uma questão de descobrir como obter todas as peças onde eu preciso delas.

Alguém sabe de alguns tutoriais atualizados que podem me fazer começar a criar um fichário de modelo personalizado?

Foi útil?

Solução

Não sei por que você acha que muita coisa mudou desde o MVC 1 sobre ligantes de modelos personalizados. Mas se eu entender o que você está tentando fazer, deve ser bastante fácil.

public class CustomModelBinder : DefaultModelBinder {
    public override object BindModel(ControllerContext controllerContext, 
        ModelBindingContext bindingContext) {

        NameValueCollection form = controllerContext.HttpContext.Request.Form;
        //get what you need from the form collection

        //creata your model
        SomeModel myModel = new SomeMode();
        myModel.Property = "value";
        //or add some model errors if you need to
        ModelStateDictionary mState = bindingContext.ModelState;
        mState.Add("Property", new ModelState { });
        mState.AddModelError("Property", "There's an error.");

        return myModel; //return your model
    }
}

E sua ação:

public ActionResult Contact([ModelBinder(typeof(CustomModelBinder))]SomeModel m){
    //...
}

Esse foi o tipo de informação que você está procurando?

Outras dicas

Dê uma olhada em vários exemplos de Ligantes de modelo MVC personalizados no meu blog.

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