C# 虚拟财产不';将模型从视图传递到控制器时,无法填充
当我运行程序并在控制器方法中设置断点时,我可以单步执行并查看recipe.Name和recipe.ID是否正确填充,但recipe.components为空 我忽略了什么?这是我的相关代码: 型号:C# 虚拟财产不';将模型从视图传递到控制器时,无法填充,c#,razor,asp.net-mvc-5,ef-code-first,entity-framework-6,C#,Razor,Asp.net Mvc 5,Ef Code First,Entity Framework 6,当我运行程序并在控制器方法中设置断点时,我可以单步执行并查看recipe.Name和recipe.ID是否正确填充,但recipe.components为空 我忽略了什么?这是我的相关代码: 型号: public class Recipe { public int ID { get; set; } public string Name { get; set; } public virtual ICollection<Ingredient> Ingredient
public class Recipe
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Ingredient> Ingredients { get; set; }
}
不能使用
@Html.ActionLink()
将包含集合(或复杂对象)属性的模型传递给get方法。在内部,该方法通过对模型中的每个属性调用.ToString()
方法来生成查询字符串值。在您的情况下,它正在生成
...?ID=someValue&Name=someValue&Ingredients=System.Collections.Generic.ICollection<Ingredient>
相反。将模型的ID传递给方法,然后再次获取模型(就像生成此视图的get方法中所做的那样),以构建xml文件
@Html.ActionLink("Export Data", "ExportData", new { id = Model.ID })
public ActionResult ExportData (int ID)
{
var recipe = db.Recipies.Where(r => r.ID = ID).FirstOrDefault();
....
}
不能将包含复杂对象集合的模型传递给GET方法。我明白了,请查看您的understandAh链接的
href
属性。非常感谢。那么,检索这些数据的最佳实践方法是什么?从我的控制器单独调用数据库以查询我需要的数据?是的,只需将模型的ID传递给ExportData
方法,然后从存储库中获取所需的数据。好的,很酷。谢谢!完美的谢谢你的帮助。
...?ID=someValue&Name=someValue&Ingredients=System.Collections.Generic.ICollection<Ingredient>
...?....&Ingredients[0].Name=someValue&Ingredients[1].Name=someValue&...
@Html.ActionLink("Export Data", "ExportData", new { id = Model.ID })
public ActionResult ExportData (int ID)
{
var recipe = db.Recipies.Where(r => r.ID = ID).FirstOrDefault();
....
}