从前端发送的表单数据在控制器ASP.NET MVC中有不同的结果

时间:2016-03-26 15:53:03

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

您好我无法使用实体框架更新我的产品。 当我从开发人员的工具提交表单时,我可以确认表单正在发送[0] .Id = 3.

但是当我调试模型时,debug.print保持打印0作为Id。

这是我的控制器

public ActionResult Details(IList<Item> model)
{
if (ModelState.IsValid)
        {
            Debug.Print(model[0].Id.ToString()); //This prints 0
            Debug.Print(model[0].Name);// This prints correctly
            Debug.Print(model[0].Size);// This prints correctly
            Debug.Print(model[0].RetailPrice.ToString());// This prints correctly
            Debug.Print(model[0].IsAvailable.ToString());// This prints correctly
            for (int i = 0; i < model.Count(); i++)
            {
                ndb.Entry(model[0]).State = System.Data.Entity.EntityState.Modified;
                ndb.SaveChanges();
            }

            return RedirectToAction("ProductIndex");
        }
        return View(model);
    }

任何人都知道为什么?

编辑:

using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<table>
    <thead>
        <tr>
            <td>Name</td>
            <td>Size</td>
            <td>Price</td>
            <td>Available</td>
        </tr>
    </thead>
    @for (int i = 0; i < Model.Count(); i++)
    {
        <tr>
            @Html.HiddenFor(m => m[i].Id)
            @Html.HiddenFor(m => m[i].Name)
            @Html.HiddenFor(m => m[i].Size)
            @Html.HiddenFor(m => m[i].RetailPrice)
            <td>
                @Model[i].Name
            </td>
            <td>
                @Model[i].Size
            </td>
            <td>
                @Model[i].RetailPrice
            </td>
            <td>
                @Html.CheckBox("["+i+"].IsAvailable", Model[i].IsAvailable)
            </td>
        </tr>
    }

    <tr>
        <td>
            <input type="submit" value="Save" class="btn btn-default" />
        </td>
    </tr>

</table>
}

正如我之前提到的,开发人员工具提交的表单显示了正确的ID,但是当它出现在控制器上时,它总是给我0作为Id。

2 个答案:

答案 0 :(得分:0)

您可能错过了视图中的ID字段。您应该在View as hidden字段中添加ID字段或将其绑定到属性。

也不建议在视图中使用EF对象。改为创建自定义视图模型。

答案 1 :(得分:0)

尝试更改

@Html.HiddenFor(m => m[i].Id)

到下面(两个或第二个都应该工作.Haven验证了它。但你需要使用Model

@Html.HiddenFor(@Model[i].Id)

OR

 @Html.HiddenFor(m => Model[i].Id)