Asp.net mvc 4 Can';无法获取窗体中的绑定对象

Asp.net mvc 4 Can';无法获取窗体中的绑定对象,asp.net-mvc-4,Asp.net Mvc 4,在ASP.NETMVC4项目中,我创建了一个名为Task的模型类及其CRUD,并在索引页中列出了我需要分别修改每一行的任务。所以我在每一行创建一个表单。但是,当我提交一行时,我不会在控制器中的操作中获得对象任务 代码如下: 谢谢 控制器 public ActionResult Index() { ViewBag.projectVersionList = this.getProjectVersionList(); ViewBag.ta

在ASP.NETMVC4项目中,我创建了一个名为Task的模型类及其CRUD,并在索引页中列出了我需要分别修改每一行的任务。所以我在每一行创建一个表单。但是,当我提交一行时,我不会在控制器中的操作中获得对象任务

代码如下:

谢谢

控制器

public ActionResult Index()
        {
            ViewBag.projectVersionList = this.getProjectVersionList();
            ViewBag.taskTypeList = this.getTaskTypeList();
            ViewBag.durationList = this.getDurationList();
            return View(db.Tasks.ToList());
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Index(Task task)//task est instancié mais les propriétées sont vides
        {
            task.User = db.UserProfiles.Find(WebSecurity.CurrentUserId);
            if (ModelState.IsValid)
            {
                db.Entry(task).State = EntityState.Modified;
                db.SaveChanges();
            }

            return View(task);
        }
查看

@model IEnumerable<TimeSheet.Models.Task>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
    <div class="responsive-table-line">
    <table class="table table-striped" data-card-view="true">
        <thead>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Date)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.UserId)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.ProjectVersionId)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.TaskTypeId)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Duration)
                </th>
                <th>
                    @Html.DisplayNameFor(model => model.Accomplished)
                </th>
                <th></th>
            </tr>
        </thead>
        <tbody>

            @foreach (var item in Model)
            {
               @Html.EditorFor(m => item)
            }
        </tbody>
    </table>
</div>
@model IEnumerable
@{
ViewBag.Title=“Index”;
}
指数

@ActionLink(“新建”、“创建”)

@DisplayNameFor(model=>model.Date) @DisplayNameFor(model=>model.UserId) @DisplayNameFor(model=>model.ProjectVersionId) @DisplayNameFor(model=>model.TaskTypeId) @DisplayNameFor(model=>model.Duration) @DisplayNameFor(model=>model.completed) @foreach(模型中的var项目) { @EditorFor(m=>item) }
编辑器模板:

@model TimeSheet.Models.Task

@using (Ajax.BeginForm(new AjaxOptions
{
    HttpMethod = "POST"
}))
{
@Html.AntiForgeryToken()
<tr>
    <td data-title="@Html.DisplayNameFor(model => model.Date)">
        @Html.HiddenFor(m => m.TaskId)
        <div class="form-group">
            @Html.TextBoxFor(m => m.Date, new { @class = "datefield form-control", type = "date" })
        </div>
    </td>
    <td data-title="@Html.DisplayNameFor(model => model.UserId)">
        @Html.DisplayFor(m => m.User.UserName)
    </td>
    <td data-title="@Html.DisplayNameFor(model => model.ProjectVersionId)">
        <div class="form-group">
            @Html.DropDownListFor(m => m.ProjectVersionId, (IEnumerable<SelectListItem>)ViewBag.projectVersionList, new { @class = "form-control" })
        </div>
    </td>
    <td data-title="@Html.DisplayNameFor(model => model.TaskTypeId)">
        <div class="form-group">
            @Html.DropDownListFor(m => m.TaskTypeId, (IEnumerable<SelectListItem>)ViewBag.taskTypeList, new { @class = "form-control" })
        </div>
    </td>
    <td data-title="@Html.DisplayNameFor(model => model.Duration)">
        <div class="form-group">
            @Html.DropDownListFor(m => m.Duration, (IEnumerable<SelectListItem>)ViewBag.durationList, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.Duration)
        </div>
    </td>
    <td data-title="@Html.DisplayNameFor(model => model.Accomplished)">
        @Html.CheckBoxFor(m => m.Accomplished)
    </td>
    <td data-title="">
        <button type="submit" class="btn btn-default glyphicon glyphicon-floppy-disk" aria-label="Left Align"></button>

        @Html.ActionLink(" ", "Edit", new { id = Model.TaskId }, new { @class = "btn btn-default glyphicon glyphicon-edit" })

        <button type="button" class="btn btn-default" aria-label="Left Align">
            <span class="glyphicon glyphicon-align-left" aria-hidden="true">  @Html.ActionLink(" ", "Details", new { id = Model.TaskId })</span>
        </button>
        <button type="button" class="btn btn-default" aria-label="Left Align">
            <span class="glyphicon glyphicon-trash" aria-hidden="true">  @Html.ActionLink(" ", "Delete", new { id = Model.TaskId })</span>
        </button>
    </td>
</tr>
            }
@model TimeSheet.Models.Task
@使用(Ajax.BeginForm)(新的AjaxOptions
{
HttpMethod=“POST”
}))
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m=>m.TaskId)
@TextBoxFor(m=>m.Date,新的{@class=“datefield表单控件”,type=“Date”})
@DisplayFor(m=>m.User.UserName)
@DropDownListFor(m=>m.ProjectVersionId,(IEnumerable)ViewBag.projectVersionList,新的{@class=“form control”})
@DropDownListFor(m=>m.TaskTypeId,(IEnumerable)ViewBag.taskTypeList,新的{@class=“form control”})
@Html.DropDownListFor(m=>m.Duration,(IEnumerable)ViewBag.durationList,新的{@class=“form control”})
@Html.ValidationMessageFor(m=>m.Duration)
@CheckBoxFor(m=>m.completed)
@ActionLink(“,”编辑“,新建{id=Model.TaskId},新建{@class=“btn btn default glyphicon glyphicon Edit”})
@ActionLink(“,”详细信息“,新的{id=Model.TaskId})
@ActionLink(“,”删除“,新的{id=Model.TaskId})
}

谢谢!我发现了pb:每个表单中的字段都是名称“items.[propertyName]”,而不是“[propertyName]”。我在视图中用模型替换item,如下所示

 @foreach (var model in Model)
        {
           @Html.EditorFor(m => model)
        }
在EditorTemplate m中按模型

model => model.Accomplished
谢谢

您不需要(也不应该使用)foreach-如果模型是
IEnumerable
,模板是
@model Task
,那么它应该是
@Html.EditorFor(m=>m)(不在循环中)