Ich versuche, eine IEnumerable
an meine Steuerung übergeben, so dass ich durch jede Zeile durchlaufen kann, einige Änderungen vornehmen und fügen Sie die Datenbank hinzu. Das Problem ist, dass IEnumberable
Null
ist, wenn es an den Controller zurückgegeben wird.Übergeben IEnumerable zu Controller
ich gelesen habe, dass ich auf meiner Liste IList
und Für statt FürJeden verwenden zu ändern - was ich verstehen ... aber jetzt meine IEnumberable
Bedürfnisse der Ansicht als IList
und ich bestanden werden bin nicht sicher, wie man das macht.
Also, ich habe ein paar Fragen.
- Ist
IList
der einzige Weg zu gehen, kann ich nicht das Modell an die Steuerung alsIEnumerable
passieren? - Wenn ich mit
IList
gehen muss, wie kann ich meinen aktuellenAsEnumberable
Code ändern, um es an die Ansicht alsIList
zu senden?
Hier ist der Code, bevor Änderungen zu machen IList
wurden aktualisiert:
Get Controller:
public ActionResult Register_step6()
{
var wp = cg.GetUserWorkPoint();
var model = (from p in db.WorkPointRoles
where p.WorkPoint == wp
select p).AsEnumerable()
.Select(r => new RegisterEmployee_Step6Model()
{
Role = r.Role,
isSelected = false,
RoleDescription = cg.GetRoleDescription(r.Role),
IconLocation = cg.GetRoleIconLocation(r.Role)
});
return View(model);
}
Beitrag Controller:
[HttpPost]
public ActionResult Register_step6(IEnumerable<RegisterEmployee_Step6Model> model)
{
foreach (var i in model)
{
//code in here to update db
}
db.SaveChanges();
}
return RedirectToAction("Index");
}
}
Ausblick:
@model IEnumerable<core_point.Models.RegisterEmployee_Step6Model>
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<h2>Select the roles that you have been employed to do, by clicking the check-box...</h2>
<table class="table">
@foreach (var item in Model)
{
<tr class="h3">
<td class="vert-align">
<img src="@item.IconLocation" height="80" width="80" />
</td>
<td class="vert-align">
@Html.CheckBoxFor(modelItem => item.isSelected, new { @class = "mycheckBox" })
</td>
<td class="vert-align">
@Html.DisplayFor(modelItem => item.RoleDescription)
</td>
<td class="vert-align">
@Html.TextBoxFor(modelItem => item.Role, new { hidden = "hidden" })
</td>
</tr>
}
</table>
<div>
Roles selected:<input type="number" id="noSelected" value="0" />
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Next" class="btn btn-default" />
</div>
</div>
}
<script src="~/Scripts/jquery-1.10.2.js"></script>
<script>
var fld_CheckBoxSelected = document.getElementById("CheckBoxSelected");
var fld_noSelected = document.getElementById("noSelected");
$(function(){
$("input.mycheckBox").change(function(){
var isSelected = this.checked;
if (isSelected) {
$("#noSelected").val(parseInt($("#noSelected").val())+ 1);
}
else
{
$("#noSelected").val(parseInt($("#noSelected").val()) - 1);
}
});
});
</script>
Ansichtsmodell:
public class RegisterEmployee_Step6Model
{
public byte Id { get; set; }
public int? Role { get; set; }
public bool isSelected { get; set; }
public string RoleDescription { get; set; }
public string IconLocation { get; set; }
}
Sie können nicht nur die Unterschrift der Controller-Methode ändern, um ein 'IList akzeptieren 'als dein Modell? –
Jeremy, Nein die folgende Meldung erhalten: Das an das Wörterbuch übergebene Modellelement ist vom Typ 'System.Linq.Enumerable + WhereSelectEnumerableIterator'2 [core_point.Models.WorkPointRole, core_point.Models.RegisterEmployee_Step6Model]', aber für dieses Wörterbuch ist ein Modell erforderlich Element des Typs 'System.Collections.Generic.IList'1 [core_point.Models.RegisterEmployee_Step6Model]'. – Ste
Normalerweise verwenden Sie 'ToArray' oder' ToList' anstelle von 'AsEnumerable()' (in der Tat sollten Sie wahrscheinlich 'AsEnumerable()' weglassen, wenn Sie nicht wirklich wissen, was Sie tun). Beide werden als "IEnumerable" und "IList" funktionieren, und es wird mehr Sinn machen, weil Sie * tatsächlich * die Daten materialisieren. In jedem Fall können Sie "IEnumerable" in der gewünschten Ansicht behalten. Achten Sie jedoch darauf, dass Sie die MVC-Regeln von [Bindung an eine Liste] befolgen (http://stackoverflow.com/q/14822615/11683). – GSerg