我是ASP.NET MVC的新手,我正在開發我的第一個項目,只是爲了好玩。 我得到這個ArgumentNullException,我無法弄清楚什麼是錯的。C#razorview DropDownListFor'值不能爲空'
這是我的模型:
public class SpeciesLabel
{
[Key]
[Required]
public string Name { get; set; }
[Required]
public CustomGroup CustomGroup { get; set; }
[Required]
public Family Family { get; set; }
[Required]
public Genus Genus { get; set; }
[Required]
public Species Species { get; set; }
}
public class SpeciesLabelDbContext : DbContext
{
public SpeciesLabelDbContext()
: base("DefaultConnection")
{
}
public DbSet<SpeciesLabel> SpeciesLabel { get; set; }
}
這是控制器:
public ActionResult Create()
{
List<SelectListItem> customGroups = new List<SelectListItem>();
IQueryable<string> customGroupsQuery = from g in customGroupsDb.CustomGroup
select g.Name;
foreach (var element in customGroupsQuery)
{
customGroups.Add(new SelectListItem()
{
Value = element,
Text = element
});
}
ViewBag.CustomGroup = customGroups;
這是控制器POST請求:
public ActionResult Create([Bind(Include = "CustomGroup,Family,Genus,Species")] SpeciesLabel speciesLabel)
{
if (ModelState.IsValid)
{
db.SpeciesLabel.Add(speciesLabel);
db.SaveChanges();
return RedirectToAction("Create");
}
return View();
}
而且本所認爲:
<pre>
@model PlantM.Models.PlantModels.SpeciesLabel
@{
ViewBag.Title = "Create";
}
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Species label</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.CustomGroup, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CustomGroup, new SelectList(ViewBag.CustomGroupList, "Value", "Text"), "Please select...", new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.CustomGroup, "", 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>
}
</pre>
我有視圖中的所有屬性的輸入,但是我剪切它們,因爲它們與此類似,異常情況相同。只有屬性名稱不會從視圖中返回,因爲它將在控制器中進行設計(其他屬性的串聯)。
這是例外,我是說我提交表單:
編輯:
加入ViewBag初始化的POST創建方法與ArgumentNullException該問題後解決,但我仍然收到空值參數,並且由於這個原因無法創建對象,並且創建視圖被一次又一次地調用!?任何人都可以建議爲什麼這些@ Html.DropDownListFor不會發布任何價值的控制器?
你是說'ViewBag.CustomGroupList'是NULL? – pookie
嗯,我認爲這不是空,因爲我看到下拉菜單中的列表,但是當我選擇一個選項,然後單擊提交按鈕時,我得到此異常。我想將數據發送回控制器存在問題,但我不知道有什麼問題。 –
將[HttpPost]放在創建動作之上? – pookie