Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net MVC模型绑定IEnumerable失败_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

C# ASP.Net MVC模型绑定IEnumerable失败

C# ASP.Net MVC模型绑定IEnumerable失败,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,我有一个应用程序,它应该在一些文本字段中显示本地数据库中的对象列表,并带有编辑它们的选项。代码在编辑时从列表中正确返回一个对象,但我的控制器没有看到任何更改。我尝试过从IEnumerable切换到IList,但没有成功。关于为什么失败(下面的代码)有什么想法吗 型号: public class EmployeeProject { [Required()] public Int32 EmployeeProjectID { get; set; } [Required()]

我有一个应用程序,它应该在一些文本字段中显示本地数据库中的对象列表,并带有编辑它们的选项。代码在编辑时从列表中正确返回一个对象,但我的控制器没有看到任何更改。我尝试过从
IEnumerable
切换到
IList
,但没有成功。关于为什么失败(下面的代码)有什么想法吗

型号:

public class EmployeeProject
{
    [Required()]
    public Int32 EmployeeProjectID { get; set; }
    [Required()]
    [Range(0, 999999999, ErrorMessage = "Not a valid ID")]
    public Int32 EmployeeID { get; set; }
    [Required()]
    public Int32 ProjectID { get; set; }
    [Display(Name = "Name")]
    public string EmployeeName { get; set; }
    [Display(Name = "Project")]
    public string ProjectName { get; set; }
    [Range(0.0, 1.0, ErrorMessage = "Must be between 0 and 1")]
    public double Hour1 { get; set; }
    ....

    public EmployeeProject()
    {
        EmployeeID = 0;
        ProjectID = 0;
        Hour1 = 0;
        ....
    }
}
控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "EmployeeProjectID,EmployeeID,ProjectID,EmployeeName,ProjectName,Hour1,Hour2,Hour3,Hour4")] EmployeeProject employeeProject)
{
    if (ModelState.IsValid)
    {
        db.Entry(employeeProject).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(employeeProject);
}
视图:

@model IEnumerable
....
@DisplayNameFor(model=>model.EmployeeName)
@DisplayNameFor(model=>model.ProjectName)
....        
@foreach(模型中的var项目)
{
使用(Html.BeginForm(“编辑”,“雇员项目”,项目))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.HiddenFor(model=>item.employeeprojectd)
@Html.HiddenFor(model=>item.EmployeeID)
@Html.HiddenFor(model=>item.ProjectID)
@DisplayFor(模型=>item.EmployeeName)
@Html.ValidationMessageFor(model=>item.EmployeeName)
@DisplayFor(model=>item.ProjectName)
@Html.ValidationMessageFor(model=>item.ProjectName)
....
}
}

奇怪的是,在action方法中,您返回一个实例
返回视图(employeeProject)而在您的视图中,您希望看到一个
IEnumerable
原因是

@model IEnumerable<WebApplication1.Models.EmployeeProject>
(或者)如果您真的想要,请更改您的操作方法,以获取
employeeProject

public ActionResult Edit(List<EmployeeProject> employeeProjects)
{
公共行动结果编辑(列出员工项目)
{

以下是我在一个项目中的表现

@model List<Game>
@using (Html.BeginForm(FormMethod.Post))
{
 @Html.AntiForgeryToken()
 @for (int i = 0; i < Model.OrderGames.Count(); i++)
 {
 <tr>  
    <td>@Html.EditorFor(m => m.OrderGames[i].GameId})</td>     
    <td>@Html.EditorFor(m => m.OrderGames[i].NumberOfPlayers})</td>
    <td>@Html.EditorFor(m => m.OrderGames[i].GameTime})</td>
    <td>@Html.EditorFor(m => m.OrderGames[i].Price})</td>                                           
</tr>                                    
}
}
@型号列表
@使用(Html.BeginForm(FormMethod.Post))
{
@Html.AntiForgeryToken()
@对于(int i=0;im.OrderGames[i].GameId})
@EditorFor(m=>m.OrderGames[i].NumberOfPlayers})
@EditorFor(m=>m.OrderGames[i].GameTime})
@EditorFor(m=>m.OrderGames[i].Price})
}
}
在这里,您可以将其转换为您的项目。 你的控制器应该是这样的

[Httppost]
public ActionResult Edit(List<Game> Games){}
[Httppost]
公共行动结果编辑(列表游戏){}

最初我应该包括这个,但是从我在控制器中的编辑,它返回到返回列表的视图。我已经更新了question@Daniel,那是完全错误的。你应该考虑在不同的页面中分离它们,或者为此创建一个局部视图。这不是特别有用,我不知道我的解决方案有什么问题(虽然显然有些东西不对,但不能和你争论)。请您更具体地说明错误所在以及单独页面/部分视图的用途是什么?您的模型是一个集合,不能使用
foreach
循环为集合生成表单控件(生成的
name
属性与您的模型没有关系,因此不会绑定任何内容)。但是,然后为集合中的每个项目创建一个表单,并且一次只能回发一个表单,这样做没有意义。然后,您的代码将开始抛出异常,因为在POST方法中,您将一个
EmployeeProject
返回到一个视图,该视图需要
IEnumerable
。显示GET方法。您正在尝试编辑一个
EmployeeProject
还是一组
EmployeeProject
@model List<Game>
@using (Html.BeginForm(FormMethod.Post))
{
 @Html.AntiForgeryToken()
 @for (int i = 0; i < Model.OrderGames.Count(); i++)
 {
 <tr>  
    <td>@Html.EditorFor(m => m.OrderGames[i].GameId})</td>     
    <td>@Html.EditorFor(m => m.OrderGames[i].NumberOfPlayers})</td>
    <td>@Html.EditorFor(m => m.OrderGames[i].GameTime})</td>
    <td>@Html.EditorFor(m => m.OrderGames[i].Price})</td>                                           
</tr>                                    
}
}
[Httppost]
public ActionResult Edit(List<Game> Games){}