我試圖在我的視圖中創建對象列表,但是在post方法中,進來的參數爲null。創建頁面可以正常加載我想要的所有信息,但是當我單擊「創建」時,我會在我的標題中看到列出的錯誤。我能做什麼錯了?未將對象引用設置爲對象的實例。自定義對象在POST時返回null
員工每天有可用的鏈接。這就是我想實現
型號
public class Availability
{
[Required]
public long Id { get; set; }
[Required]
[DataType(DataType.Text)]
[Display(Name = "Weekday")]
public string weekday { get; set; }
[DataType(DataType.Time)]
[Display(Name = "Start Time")]
public DateTime StartTime { get; set; }
[DataType(DataType.Time)]
[Display(Name = "End Time")]
public DateTime EndTime { get; set; }
public virtual Employee employee { get; set; }
}
}
自定義類
public class SetAvailability
{
public long EmpID { get; set; }
public String firstName {get; set;}
public String lastName { get; set; }
public Availability availability {get; set;}
}
控制器方法
// GET: /Availability/Create
public ActionResult Create(long id)
{
string[] weekdays ={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//find the employee
Employee emp = db.Employees.Find(id);
//create a list of setAvailability objects for each day
List<SetAvailability> editor = new List<SetAvailability>();
//instantiate each SetAvailability object and populate accordingly for 7 days
for (int i = 0; i < 7; i++)
{
//create a blank SetAvilability
var _editor = new SetAvailability();
//create a blank availability
_editor.availability = new Availability();
//set the weekday
_editor.availability.weekday = weekdays[i].ToString();
//set the employee id, first name and last name
_editor.EmpID = emp.Id;
_editor.firstName = emp.FirstName;
_editor.lastName = emp.LastName;
//add the _editor to the editorlist
editor.Add(_editor);
}
return View(editor);
}
//
// POST: /Availability/Create
[HttpPost]
public ActionResult Create(List<SetAvailability> dto)
{
//dto object is coming in null! (checked by debugging)
List<SetAvailability> temp = new List<SetAvailability>();
temp = dto;
if (ModelState.IsValid)
{
// set the values for each availability object
// breaks here!
foreach (var item in dto)
{
// get the employee
item.availability.employee = db.Employees.Find(item.EmpID);
// weekday should already be set
// start and end times should come in from the create view
db.Availability.Add(item.availability);
}
db.SaveChanges();
return RedirectToAction("Index","employee");
}
return View(temp);
}
查看
@model List<VolumeV2.Models.DTOs.SetAvailability>
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Availability</legend>
<table>
<tr>
@foreach (var item in Model)
{
@Html.HiddenFor(model => item.EmpID)
@Html.HiddenFor(model => item.firstName)
@Html.HiddenFor(model => item.lastName)
<td>
@Html.LabelFor(model => item.availability.weekday)
</td>
<td>
@Html.LabelFor(model => item.availability.StartTime)
</td>
<td>
@Html.LabelFor(model => item.availability.EndTime)
</td>
break;
}
</tr>
@foreach (var item in Model){
@Html.HiddenFor(model => item.EmpID)
@Html.HiddenFor(model => item.firstName)
@Html.HiddenFor(model => item.lastName)
<tr>
<td>
@Html.EditorFor(modelitem => item.availability.weekday)
@Html.ValidationMessageFor(modelitem => item.availability.weekday)
</td>
<td>
@Html.EditorFor(modelitem => item.availability.StartTime)
@Html.ValidationMessageFor(modelitem => item.availability.StartTime)
</td>
<td>
@Html.EditorFor(modelitem => item.availability.EndTime)
@Html.ValidationMessageFor(modelitem => item.availability.EndTime)
</td>
</tr>
}
</table>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
嘗試編輯模板。 – ssilas777 2013-03-15 06:36:03
你會碰巧知道一個很好的基本MVC4教程嗎?我很難找到一個好的源碼 – Fpanico 2013-03-15 06:53:25