none
problemas com Radio button dentro do foreach RRS feed

  • Pergunta

  • Ola pessoal estou com o seguinte problema, tenho um repeater numa tela de cadastro que ao clicar em um dos radio buttons desmarque todos os outros do mesmo tipo, mas não esta funcionando,

    codigo :

       

     @{
    /*...*/          int cont = 0;
              foreach (var foto in @ViewBag.produtoAlterar.FotosProduto)
              { 
           
                   @Html.RadioButtonFor(model => model.FotosProduto[cont].IdFoto, "1", new { @placeholder = "Novo", @Style = "width:20px;", @name = "acondicao"
     })     <em>Usado</em>  /*...*/ 
             }

    visualizando o codigo fonte da página o radio button fica da seguinte maneira :

    <input Style="width:20px;" data-val="true" data-val-number="The field IdFoto must be a number." data-val-required="The IdFoto field is required." id="FotosProduto_3__IdFoto" name="FotosProduto[3].IdFoto" placeholder="Novo" type="radio" value="1" />     <em>Usado</em>
      

    alguem saberia uma forma para que a expressão lambda não interfira na alteracao do id e name?

    ou poderia me indicar outra forma de montar o repeater como desejo?

    desde ja obrigado pela atenção



    terça-feira, 23 de abril de 2013 13:22

Respostas

  • Esses dias precisei criar um CheckBoxList segue o meu código, a ideia do radiobutton é a mesma.

    public class ItemViewModel
        {
            public int Id { get; set; }
            [Display(Name = "Nome")]
            public string Name { get; set; }
            public bool Checked { get; set; }

        }



    //Helpers

    public static class CheckboxHelper { public static IHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<ItemViewModel> items) { var output = new StringBuilder(); foreach (var item in items) { output.Append(@"<div class=""control-group"">"); output.Append("<label for=\""+name+"_"+item.Id+"\" class=\"control-label\">"+item.Name+"</label>"); output.Append("<div class=\"controls\">"); output.Append("<input type=\"checkbox\" name=\"" + name + "\" "); output.Append("id=\"" + name + "_" + item.Id + "\" "); output.Append("value=\""+item.Id+"\" "); if (item.Checked) output.Append(@" checked=""chekced"""); output.Append(" />"); output.Append("</div>"); output.Append("</div>"); } return MvcHtmlString.Create(output.ToString()); } }

    //View
    @Html.CheckBoxList("ItemViewModelsIds",Model.ItemViewModels)



    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta leandro Bertanha terça-feira, 23 de abril de 2013 19:46
    terça-feira, 23 de abril de 2013 16:18
  • Tens que referenciar o namespace

    using Projeto.XXY;


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta leandro Bertanha terça-feira, 23 de abril de 2013 19:46
    terça-feira, 23 de abril de 2013 17:21
  • Duvida, você está passando uma coleção de ItemViewModels né!
    Pelo using que você informou a classe deve ser assim.

    namespace testeradiobuttons.Models
    {
    
    	public static class CheckboxHelper{
    
    		public static IHtmlString CheckBoxList(this HtmlHelper helper,string name, IEnumerable<ItemViewModel> items){
    
    			//codigo
    
    		}
    
    	}
    
    }


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta leandro Bertanha terça-feira, 23 de abril de 2013 19:46
    terça-feira, 23 de abril de 2013 19:43

Todas as Respostas

  • Olá,

    Você pode criar um Helper pra isso, segue abaixo um exemplo de como implementar extension method .

    Has anyone implement RadioButtonListFor<t>for ASP.NET MVC?</t>


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    terça-feira, 23 de abril de 2013 14:02
  • não consegui implementar os exemplos desse link, ainda não saquei como implementar o extension method, estou procurando outros tutorias mas ainda nao achei algum que deixe claro o que preciso para fazer o negocio funcionar, poderia me passar uma pista, ou um passo a passo do que devo fazer?
    terça-feira, 23 de abril de 2013 14:42
  • Esses dias precisei criar um CheckBoxList segue o meu código, a ideia do radiobutton é a mesma.

    public class ItemViewModel
        {
            public int Id { get; set; }
            [Display(Name = "Nome")]
            public string Name { get; set; }
            public bool Checked { get; set; }

        }



    //Helpers

    public static class CheckboxHelper { public static IHtmlString CheckBoxList(this HtmlHelper helper, string name, IEnumerable<ItemViewModel> items) { var output = new StringBuilder(); foreach (var item in items) { output.Append(@"<div class=""control-group"">"); output.Append("<label for=\""+name+"_"+item.Id+"\" class=\"control-label\">"+item.Name+"</label>"); output.Append("<div class=\"controls\">"); output.Append("<input type=\"checkbox\" name=\"" + name + "\" "); output.Append("id=\"" + name + "_" + item.Id + "\" "); output.Append("value=\""+item.Id+"\" "); if (item.Checked) output.Append(@" checked=""chekced"""); output.Append(" />"); output.Append("</div>"); output.Append("</div>"); } return MvcHtmlString.Create(output.ToString()); } }

    //View
    @Html.CheckBoxList("ItemViewModelsIds",Model.ItemViewModels)



    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta leandro Bertanha terça-feira, 23 de abril de 2013 19:46
    terça-feira, 23 de abril de 2013 16:18
  • Estou quase la Marco, o problema agora é com relação ao IHtmlString, não estou acertando o lugar que ele deve ficar, montei um projeto para testar o seu comando, inclui uma classe na model inseri sua classe la, mas na view o CheckBoxList não esta sendo reconhecido
    terça-feira, 23 de abril de 2013 17:16
  • Tens que referenciar o namespace

    using Projeto.XXY;


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta leandro Bertanha terça-feira, 23 de abril de 2013 19:46
    terça-feira, 23 de abril de 2013 17:21
  • ainda da erro nos checkbox :

    @Html.CheckBoxList("ItemViewModelsIds",Model.ItemViewModels)

    a referencia que fiz na view:

    @using testeradiobuttons.Models

    terça-feira, 23 de abril de 2013 17:59
  • Duvida, você está passando uma coleção de ItemViewModels né!
    Pelo using que você informou a classe deve ser assim.

    namespace testeradiobuttons.Models
    {
    
    	public static class CheckboxHelper{
    
    		public static IHtmlString CheckBoxList(this HtmlHelper helper,string name, IEnumerable<ItemViewModel> items){
    
    			//codigo
    
    		}
    
    	}
    
    }


    Não esqueça de marcar o post como útil caso tenha te ajudado.

    • Marcado como Resposta leandro Bertanha terça-feira, 23 de abril de 2013 19:46
    terça-feira, 23 de abril de 2013 19:43
  • deu certo aqui bro, mechi e consegui fazer rodar, vlww msm!!!!!
    terça-feira, 23 de abril de 2013 19:46