私は今週、単純なasp.netアプリケーションに取り組んでいます。そして、今日私は、私のコントローラメソッドに何も返さないという鋭い視点で問題を抱えていました。ビューは、リスト<>内のいくつかのオブジェクトを戻さなければなりませんでした。asp.net mvcビューはforループを使用すると返ります
私はついにオブジェクトのリストをビューに渡し、 'for'ループでループしていました。 foreachループで今日も試しましたが、うまくいきませんでした。
私はビューに空のオブジェクトのリストを渡し、次のGETメソッドを持っている:
// GET: MpSwitches/CreateSeveral
public ActionResult CreateSeveral()
{
var mpSwitches = new List<MpSwitch>
{
new MpSwitch() {IpAdress = "1"},
new MpSwitch() {IpAdress = "2"},
new MpSwitch() {IpAdress = "3"},
new MpSwitch() {IpAdress = "4"},
new MpSwitch() {IpAdress = "5"}
};
// Check if the user gets redirected to this method because of a First Time Startup.
if (TempData["RedirectFirstTimeStartup"] != null)
{
ViewBag.FirstTime =
"Je bent doorgestuurd naar deze pagina omdat er nog geen MP-switches in de database staan.";
return View(mpSwitches);
}
return View(mpSwitches);
}
は、次に表示があります:
@model List<WebInterface.Models.MpSwitch>
@{
ViewBag.Title = "Create several";
}
<h2>Create several</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>MpSwitch</h4>
@if (ViewBag.FirstTime != null)
{
<div class="alert-warning">
<b>Opgelet! </b>@ViewBag.FirstTime
</div>
}
@for (int i = 0; i < Model.Count; i++)
{
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model[i].IpAdress, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model[i].IpAdress, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model[i].IpAdress, "", new { @class = "text-danger" })
</div>
</div>
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
私の質問は:「なぜdoesnのこの同じコードは 'for'ループではなく 'foreach'で動作しますか?
現在動作していないコード:foreachループを使用する場合
@foreach (var item in Model)
{
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger"})
<div class="form-group">
@Html.LabelFor(modelItem => item.IpAdress, htmlAttributes: new {
@class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(modelItem => item.IpAdress, new {
htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(modelItem => item.IpAdress, "", new
{ @class = "text-danger" })
</div>
</div>
}
を以下のコントローラメソッドは、(パラメータがnull)パラメータを取得しません。
// POST: MpSwitches/CreateSeveral
// To protect from overposting attacks, please enable the specific
properties you want to bind to, for
// more details see https://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateSeveral([Bind(Include =
"Id,IpAdress,LastSyncDateTime")] List<MpSwitch> mpSwitches)
{
if (ModelState.IsValid)
{
foreach (var mpSwitch in mpSwitches)
{
db.MpSwitches.Add(mpSwitch);
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(mpSwitches);
}
、私は次のエラーを取得する:あなたが取得していないLink to image of my error
動作していないコードを投稿できますか? foreachのコード – Kevin
! –
私は動作していないコードを追加しました – Jeroen