Usuário com melhor resposta
problemas com Radio button dentro do foreach

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
- Editado leandro Bertanha terça-feira, 23 de abril de 2013 13:27
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; }
}
//Helperspublic 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
-
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
-
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
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.
-
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?
- Editado leandro Bertanha terça-feira, 23 de abril de 2013 15:24
-
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; }
}
//Helperspublic 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
-
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
-
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
-
-
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
-