Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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# 将复杂模型从视图传递到控制器_C#_Asp.net Core - Fatal编程技术网

C# 将复杂模型从视图传递到控制器

C# 将复杂模型从视图传递到控制器,c#,asp.net-core,C#,Asp.net Core,我的问题是将模型返回控制器。。。 我有一个烹饪食谱网站。和两个模型 public class FeedBackListViewModel { public int FeedBackID { get; set; } public string FoodName{ get; set; } public List<StepModel> Steps { get; set; } } public class Food { public

我的问题是将模型返回控制器。。。 我有一个烹饪食谱网站。和两个模型

public class FeedBackListViewModel
{      
    public int  FeedBackID { get; set; }
    public string FoodName{ get; set; }
    public List<StepModel> Steps { get; set; }
}

public class Food 
{    
     public int ID {get;set;}
     public string FoodName { get; set; } 
     public string Time { get; set; }
     public List<StepModel> Steps { get; set; }
 }

public class StepModel 
{    
     public int StepID {get;set;}
     public int StepNo { get; set; } 
     public string StepDetail { get; set; }
     public bool Achived { get; set; }
}

public IActionResult Edit(int id)
{
   // Imagine i have got a Food[0].Steps{Step1, Step2, Step 3}
       each food has different number of Steps.
    return View(Food[0]);
}

公共类反馈列表视图模型
{      
公共int反馈ID{get;set;}
公共字符串FoodName{get;set;}
公共列表步骤{get;set;}
}
公共食品
{    
公共int ID{get;set;}
公共字符串FoodName{get;set;}
公共字符串时间{get;set;}
公共列表步骤{get;set;}
}
公共类模型
{    
public int StepID{get;set;}
public int StepNo{get;set;}
公共字符串StepDetail{get;set;}
公共布尔实现{get;set;}
}
公共IActionResult编辑(内部id)
{
//假设我有食物[0]。步骤{Step1,Step2,step3}
每种食物都有不同的步骤。
返回视图(食物[0]);
}
cshmtl文件。。。为了便于阅读,我简化了代码

 @model FeedBackListViewModel

 <form asp-action="Edit">
    <input asp-for="FoodName " class="form-control" />
    @foreach (var item in Model.Steps)
          {
       <tr>
           <td>@Html.DisplayFor(model => item.StepID)</td>
           <td>@item.StepNo</td>
            <td>
            <input type="text" id="@item" value="@item.StepDetail" />
                    </td>
                    <td><select asp-for="@item.Achivmed">
                           <option value = yes> Yes </option>
                           <option value = No> No </option>
                        </select> 
                    </td>                        
        </tr   >
            }



[HttpPost]
public IActionResult Edit(FeedBackListViewModel viewModel)
{
    // I got my foodName detail correct but Steps are always null. 
    // I can't retrieve changes on steps. 

    return View();
}
@模型反馈列表视图模型
@foreach(Model.Steps中的var项)
{
@DisplayFor(model=>item.StepID)
@项目编号
对
不
}
[HttpPost]
公共IActionResult编辑(反馈列表视图模型视图模型)
{
//我的foodName详细信息正确,但步骤始终为空。
//我无法检索步骤上的更改。
返回视图();
}

试试下面的方法。我认为当
反馈列表视图模型
得到初始化时,
步骤
没有被初始化。
公共类反馈列表视图模型 {
公共int反馈ID{get;set;} 公共字符串FoodName{get;set;} 公共列表步骤{get;set;}

   public FeedBackListViewModel()
   {
      Steps = new List<StepModel>(); 
   }
}
公共反馈列表视图模型()
{
步骤=新列表();
}
}

首先,我没有看到将数据注入集合的代码

public class FeedBackListViewModel
{      
    public int FeedBackID { get; set; }
    public string FoodName{ get; set; }
    public List<StepModel> Steps { get; set; } = new List<StepModel>();

}

公共类反馈列表视图模型
{      
公共int反馈ID{get;set;}
公共字符串FoodName{get;set;}
公共列表步骤{get;set;}=new List();
}
还有,这里有一个打字错误

<select asp-for="@item.Achivmed">


再试一次

您是否@inject FeedBackListViewModel?是@model FeedBackListViewModel公共类FeedBackListViewModel}我想我们必须查看负责视图的控制器操作,以找出模型部分为空的原因。谢谢大家的帮助。。我用for循环而不是foreach修复了它。我不知道有什么不同,但它现在起作用了。我要在哪里拨号呢?因为Html编辑表单是正确的。但是当我把它提交回控制器时,步骤是空的。嗨,ViewModel可以初始化,这并不意味着你的列表被初始化,因为它是一个单独的对象,依我看,你必须显式初始化StepModel列表。嗨,再次。好的,我按照你说的在视图中初始化了它。返回步骤现在为空。。。cshtml无法从表单中填充步骤模型。@AliAzra,您正在取得进展。现在,您可以了解表单不填充列表的原因。干杯@AliAzra,也许您需要从服务器填充步骤,并让视图引擎渲染它。我看到你在视图中有一个ech。这意味着视图希望填充的步骤列表是循环的。我这样做了,但返回步骤仍然为空。。这次不为null。@AliAzra您仍然没有向我展示如何将项添加到集合中。问题是如何将模型从视图传递到控制器。你倒过来了,这是个没用的回答。谢谢大家的帮助。。我用for循环而不是foreach修复了它。我不确定两者的区别,但它现在起作用了。