我在EmployeeController中有一个动作,如
public ActionResult approvalList()
{
int sessionUser = Convert.ToInt32(Session["LogedUserID"]);
var listForApproval = db.TblExpenseItem.Where(k => k.UserID.Equals(sessionUser));
return View(listForApproval.ToList());
}
我添加了一个带有模板“List”和模型类“tableFromMyDB”的视图。(我自己输了@using(Html.BeginForm)并提交了按钮。)
@model IEnumerable<ExpenseApplication.Models.TblExpenseItem>
@{
ViewBag.Title = "approvalList";
}
<h2>approvalList</h2>
<p>
@Html.ActionLink("Create New Expense", "ExpenseReport", "Employee")
</p>
@using (Html.BeginForm("approvalList", "Employee", FormMethod.Post))
{
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.ExpenseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Description)
</th>
<th>
@Html.DisplayNameFor(model => model.Amount)
</th>
<th>
@Html.DisplayNameFor(model => model.isSended)
</th>
<th>
@Html.DisplayNameFor(model => model.isRejected)
</th>
<th>
@Html.DisplayNameFor(model => model.TblCategory.CtgName)
</th>
<th>
@Html.DisplayNameFor(model => model.TblUsers.UserName)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
if (item.isSended == false)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.ExpenseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.DisplayFor(modelItem => item.Amount)
</td>
<td>
@Html.DisplayFor(modelItem => item.isSended)
</td>
<td>
@Html.DisplayFor(modelItem => item.isRejected)
</td>
<td>
@Html.DisplayFor(modelItem => item.TblCategory.CtgName)
</td>
<td>
@Html.DisplayFor(modelItem => item.TblUsers.UserName)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.ExpItemID }) |
@Html.ActionLink("Details", "Details", new { id = item.ExpItemID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.ExpItemID })
</td>
</tr>
}
}
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<th>Total Amount:</th>
<td>
@Model.Sum(x => x.Amount)
</td>
</tr>
</table>
<div class="col-md-offset-8 col-md-12">
<input type="submit" value="Send List To Manager" class="btn btn-default" />
</div>
}
我的控制器中的httppost动作。
[HttpPost]
public ActionResult approvalList(List<TblExpenseItem> expItemList)
{
foreach (TblExpenseItem item in expItemList)
{
do stuff..
}
int sessionUser = Convert.ToInt32(Session["LogedUserID"]);
expItemList = db.TblExpenseItem.Where(k => k.UserID.Equals(sessionUser)).ToList();
return View(expItemList);
}
当我点击提交按钮时,它会在expItemList上抛出nullReferenceException
我做了我的搜索并找到了一些解决方案。但他们都是关于创建,编辑等
我只是想列出看看我的表中的内容然后只提交它。之后,我将从expItemList获取foreach的一些数据。
顺便说一句我是MVC的新手,这是我在那里的第一个问题,所以如果我有任何错误,我很抱歉。
答案 0 :(得分:1)
Html.DisplayFor
呈现数据,但在提交时不会将其传递回控制器。如果您需要保留和发送数据,可以使用Html.EditorFor
并使用htmlAttributes
禁用该组件,或使用Html.DisplayFor
方法并将其与{{1}配对这将存储提交的值。