Inquiridor
Fazer um foreach dentro de cshtml

Pergunta
-
Está dando erro da forma que eu fiz o foreach. Se coloco @ dá erro no analisador. Se retiro dá outros erros. Como eu faço? Abaixo me código completo. Do jeito que tá tá dando erro de NullException no foreach.
@model Ruptura.Models.RupturaEntities
@{
ViewBag.Title = "CadastroCargo";
Layout = "~/Views/Shared/_LayoutBase.cshtml";
}
<link href="~/Content/Jqwidgets/jqx.base.css" rel="stylesheet" />
<link href="~/Content/Jqwidgets/jqx.summer.css" rel="stylesheet" />
<br />
<h3>Cadastro de Cargos</h3>
<br />
<div class="container">
<div class="row">
<div class="col-md-12">
@*<div class="col-md-1">
<label for="txtCargo">Cargo:</label>
</div>*@
<div class="col-md-4">
<input type="text" class="form-control col-md-6" name="txtCargo" id="txtCargo" placeholder="Digite um cargo válido">
</div>
</div>
<br /><br />
<div class="col-md-6">
<h3 class="text-center">Unidade de negócio</h3>';
<div class="well" style="max-height: 350px;">
<ul class="list-group checked-list-box" id="check-list-box">
@foreach (var rpt in Model.Apresentacao)
{
<li class="list-group-item" data-style="button" data-color="success">rpt.Unidade_Negocio</li>
}
</ul>
</div>
</div>
<div class="col-md-6">
<br /><br /><br />
<div class="well" style="max-height: 300px;">
<ul class="list-group list-box">
<li class="list-group-item" data-style="button">Gerente Região Norte</li>
<li class="list-group-item" data-style="button" data-color="success">Gerente Região Sul</li>
<li class="list-group-item" data-style="button" data-color="info">Gerente São Paulo</li>
</ul>
</div>
</div>
<div class="col-md-12">
<div class="col-md-6">
<label class="checkbox" for="ckbAtivo">
<input type="checkbox" checked="checked" class="checkbox large" data-label="suffix" data-label-prepend="prefix" name="ckbAtivo" id="ckbAtivo">Ativo
</label>
</div>
</div>
</div>
<div id="content">
<div class="listTree"></div>
<button class="btn btn-success" onclick=" return GravaCargo();">Gravar</button>
@Html.ActionLink("Voltar", "Index", "Home", new { }, new { @class = "btn btn-danger" })
</div>
</div>
<script src="~/Scripts/CheckListBox/CheckListBox.js"></script>
<script src="~/Scripts/CadastroCargo/CadastroCargo.js"></script>
Todas as Respostas
-
Tente assim:
@{ foreach ... }
Provavelmente ele irá grifar o <li> de verde dizendo que precisa estar dentro da div.- Editado Fernando Mamprin terça-feira, 26 de agosto de 2014 17:49
-
-
Dá esse erro:
An exception of type 'System.NullReferenceException' occurred in App_Web_a0cxhi0k.dll but was not handled in user code
Additional information: Referência de objeto não definida para uma instância de um objeto. -
-
Eu já fiz o foreach mas no ViewData.
Olha o link que eu achei eu acho que irá te ajudar cara:
http://stackoverflow.com/questions/15973434/foreach-in-a-foreach-in-mvc-view
-
Tem que colocar @ na frente do rpt.Unidade_Negocio e a Model.Apresentacao sempre tem que ter valor, não pode ser NULL
if(Model != null && Model.Apresentacao != null)
{
@foreach (var rpt in Model.Apresentacao)
{
<li class="list-group-item" data-style="button" data-color="success">@rpt.Unidade_Negocio</li>
}}
-
Então eu pergunto, o que levaria a Model ou a Model.Apresentacao estarem nulos? O que pode acontecer? Como disse, é uma entidade do BD que está populada. Então o que poderia acontecer?
É necessário fazer alguma instanciação?
- Editado pnet quarta-feira, 27 de agosto de 2014 11:23
-
Então eu pergunto, o que levaria a Model ou a Model.Apresentacao estarem nulos? O que pode acontecer? Como disse, é uma entidade do BD que está populada. Então o que poderia acontecer?
É necessário fazer alguma instanciação?
Cara, veja o link que postei anteriormente.
Sempre que você retorna sua View deve trazer a model populada.
Caso isso não ocorra consequentemente ela estará nula.
Itens do link:
public ActionResult AllCategories(int id = 0) { return View(db.Categories.Include(p => p.Products).ToList()); } public class Product { [Key] public int ID { get; set; } public int CategoryID { get; set; } //new code public virtual Category Category { get; set; } public string Title { get; set; } public string Description { get; set; } public string Path { get; set; } //remove code below //public virtual ICollection<Category> Categories { get; set; } } public class Category { [Key] public int CategoryID { get; set; } public string Name { get; set; } //new code public virtual ICollection<Product> Products{ get; set; } } // View foreach (var category in Model) { <h3><u>@category.Name</u></h3> <div> <ul> @foreach (var product in Model.Products) { // cut for brevity, need to add back more code from original <li>@product.Title</li> } </ul> </div> }
-
Esta é minha controller atualmente. Como eu faço? Não entendi bem.
public class CadastroCargoController : Controller
{
string Erro;
// GET: CadastroCargo
public ActionResult Index()
{
return View();
}
public ActionResult CadastroCargo()
{
return View();
}[HttpPost]
public JsonResult carregaCheckBox()
{
RupturaEntities db = new RupturaEntities();
var result_ap = db.Apresentacao
.Select (a => new {a.Codigo_Unidade_Negocio, a.Unidade_Negocio}).ToList().Distinct();
return Json(new { result_ap }, JsonRequestBehavior.AllowGet);
}
} -
Seria algo com isso:
public class CadastroCargoController : Controller { [HttpPost] public JsonResult carregaCheckBox() { RupturaEntities db = new RupturaEntities(); // Quis demonstrar que você deve valorizar sua model com a lista, e retornar a model Model.Apresentacao = db.Apresentacao .Select (a => new {a.Codigo_Unidade_Negocio, a.Unidade_Negocio}).ToList().Distinct(); return Json(new { Model.Apresentacao }, JsonRequestBehavior.AllowGet); } }
Creio que possa ser isso.
Só não consigo testar, mas a ideia é essa.
-
-
-
Resolvi assim:
<ul class="list-group checked-list-box" id="check-list-box">
@{
Ruptura.Models.RupturaEntities db = new Ruptura.Models.RupturaEntities();
var result_ap = db.Apresentacao
.Select(a => new { a.Codigo_Unidade_Negocio, a.Unidade_Negocio }).ToList().Distinct();
foreach (var item in result_ap)
{
<li class="list-group-item" data-style="button" data-color="success">@item.Unidade_Negocio</li>
}
}