none
Model Binding não funciona se o parâmetro tiver o mesmo nome de uma das propriedades do Model RRS feed

  • Discussão Geral

  • Fala ae pessoal,

    Estou encontrando um problema ao tentar nomear o parâmetro que representa o meu model em uma action.
    Estranhamente se o nome o parâmetro na controller tiver o mesmo nome de algum dos atributos presente na classe que
    representa a controller, então o parametro sempre virá nulo na controller.
    Isso me parece um bug.
    Ex.:

    Este é o meu modelo:

    [Serializable]
        public class ConteudoGerenciado
        {
            public virtual int Id { get; set; }
            public virtual string Nome { get; set; }
        }

    Esta é a View

    @model CEP.Persistence.Entities.ConteudoGerenciado 
    @{ ViewBag.Title = "Index"; } 
    <h2>Index</h2> 
    
    @using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> <legend>ConteudoGerenciado</legend>
    
    <div class="editor-label"> 
    @Html.LabelFor(model => model.Nome) 
    </div> 
    <div class="editor-field"> 
    @Html.EditorFor(model => model.Nome) 
    @Html.ValidationMessageFor(model => model.Nome) </div>
     <p> <input type="submit" value="Create" /> </p> </fieldset> }
    

    E Este é o Controller

    public class AboutController :BaseController
        {
    
            public ActionResult Index()
            {
                return View();
            }
    
            [HttpPost]
            public ActionResult Index(ConteudoGerenciado nome)
            {
                return View();
            }
        }

    Eu acho que o desenvolvedor deveria ser livre para nomear o atributo de entrada dos action methods.
    Porém o model binder do mvc impede que seja usado o parametro de entrada da action tenha o mesmo nome de uma das propriedades da classe que representa o parâmetro. Quando isso acontece ele não faz o binding do formulário para o parâmetro de entrada da controller.

    Pra mim isso parece bug. É isso mesmo ?


    Regards, Eder Cardoso


    Regards, Eder Cardoso

    quarta-feira, 12 de setembro de 2012 20:46

Todas as Respostas

  • Aparentemente é um bug mas você "deu um nó" no ModelBinding, em qual referência ele vai pegar o objeto "ConteudoGerenciado"?

    Do objeto "ConteudoGerenciado" - parâmetro "nome" - da action Index ou do TextBox "nome"?

    Você tem liberdade para colocar qualquer nome nos parametros das suas Action mas deve respeitar um minimo de semântica para evitar conflitos e assegurar que o ModelBinding funcione corretamente.

    Abraços


    quarta-feira, 19 de setembro de 2012 18:10
    Moderador