我正在更新多個記錄,當我點擊提交按鈕後,我得到錯誤,這表明控制器收到NULL,並在第36行報告以下錯誤 下面是我的控制器,視圖和模型的代碼。集合被提交回控制器時獲取對象引用未設置爲對象的實例。錯誤
未將對象引用設置爲對象的實例。 描述:
執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤 以獲取有關該錯誤的更多信息以及源自 代碼的位置。 異常詳細信息:System.NullReferenceException:未將對象引用設置爲對象的實例。
Source Error:
Line 34: public ActionResult UpdateAll(ICollection<Test0> test0s)
Line 35: {
Line 36: foreach (var tst in test0s)
Line 37: {
Line 38: if (ModelState.IsValid)
Source File: c:\users\rsc_vok\documents\visual studio 2010\Projects\MvcTest0\MvcTest0\Controllers\Test0Controller.cs Line: 36
這裏是模型:
namespace MvcTest0.Models
{
public class Test0
{
public int id { get; set; }
public int SectnID { get; set; }
public string Section { get; set; }
public string Comment { get; set; }
}
public class Test0DBContext : DbContext
{
public DbSet<Test0> Test0s { get; set; }
}
}
這裏是我的控制器代碼:
public ActionResult UpdateAll(int id=0)
{
int sectnid = id;
List<Test0> records = db.Test0s.ToList();
var Sectnrecord = from r in records
where r.SectnID == sectnid
select r;
return View(Sectnrecord.ToList());
}
[HttpPost]
public ActionResult UpdateAll(ICollection<Test0> test0s)
{
foreach (var tst in test0s)
{
if (ModelState.IsValid)
{
db.Entry(tst).State = EntityState.Modified;
}
}
db.SaveChanges();
return View(test0s);
}
這裏是我的看法
@model IEnumerable<MvcTest0.Models.Test0>
@{
ViewBag.Title = "UpdateAll";
}
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
var sectnHeader = new String[10];
sectnHeader[0] = "A. QUALITY";
sectnHeader[1] = "B. VR REFERRAL";
var items = Model.ToArray();
var sections = 1;
for (var sectnLoop = 0; sectnLoop < sections; sectnLoop++)
{
<table>
<tr>
<td>
<b>@(sectnHeader[sectnLoop])</b>
</td>
</tr>
</table>
<table>
<tr>
<th>SectnID</th>
<th>Section</th>
<th>Comment</th>
</tr>
</table>
for (var i = sectnLoop * 2; i < sectnLoop * 2 + 2; i++)
{
var sctnid = "sectnname" + i;
@Html.HiddenFor(m => items[i].id)
@Html.HiddenFor(m => items[i].SectnID)
<table>
<tr>
<td>
@Html.DisplayFor(m => items[i].SectnID)
</td>
<td>
@Html.EditorFor(m => items[i].Section)
@Html.ValidationMessageFor(m => items[i].Section)
</td>
<td>
@Html.EditorFor(m => items[i].Comment)
@Html.ValidationMessageFor(m => items[i].Comment)
</td>
</tr>
</table>
}
}
<p>
<input type="submit" value="Save" />
</p>
}
視圖的代碼緊跟在上面的控制器的代碼之後,隨後是模型 - 抱歉,當我發佈問題時,我無法很好地將它們分開。 – user1456934
您是否嘗試過'FormCollection coll'而不是您輸入的列表'ICollection test0s'?bcoz我懷疑它無法填充給定的模型。 –