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修复了它。我不确定两者的区别,但它现在起作用了。