ASP.NET MVC无法从视图到控制器获取列出的数据

时间:2017-08-24 15:31:40

标签: c# asp.net-mvc post nullreferenceexception

我在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的新手,这是我在那里的第一个问题,所以如果我有任何错误,我很抱歉。

1 个答案:

答案 0 :(得分:1)

Html.DisplayFor呈现数据,但在提交时不会将其传递回控制器。如果您需要保留和发送数据,可以使用Html.EditorFor并使用htmlAttributes禁用该组件,或使用Html.DisplayFor方法并将其与{{1}配对这将存储提交的值。