C# 后期操作中的ViewModel为空

C# 后期操作中的ViewModel为空,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,有人能帮我知道为什么model.Prod像下图一样为空,而model.catg不为空吗?我的产品表中有一些项目。而且在我将@Html.HiddenFor(p=>p.Prod[i].id)添加到视图之后,model.Prod不是空的,只有id有值。其他参数仍然为空 @model-HandMShop.ViewModel.HMViewM @使用(Html.BeginForm(“ShopPage”,“Shop”,FormMethod.Post)){ @for(int i=0;imodel.catg[i

有人能帮我知道为什么
model.Prod
像下图一样为空,而
model.catg
不为空吗?我的产品表中有一些项目。而且在我将
@Html.HiddenFor(p=>p.Prod[i].id)
添加到视图之后,
model.Prod
不是空的,只有
id
有值。其他参数仍然为空

@model-HandMShop.ViewModel.HMViewM
@使用(Html.BeginForm(“ShopPage”,“Shop”,FormMethod.Post)){
@for(int i=0;imodel.catg[i].IsChecked)
@Model.catg[i].类别名称
@Html.HiddenFor(model=>model.catg[i].id)
@Html.HiddenFor(model=>model.catg[i].CategoryName}
@对于(int i=0;i@Model.Prod[i].说明

}
我使用的视图模型:

public class HMViewM
{
    public List<User> userr { get; set; }
    public List<homesec1slider> homesec1 { get; set; }
    public List<Category>  catg { get;set; }
    public List<Colour> colrs { get; set; }
    public List<PhotoProduct> Photopr { get; set; }
    public List<Product> Prod { get; set; }
    public bool Istehsal { get; set; }
}
公共类HMViewM
{
公共列表用户r{get;set;}
公共列表homesec1{get;set;}
公共列表catg{get;set;}
公共列表列{get;set;}
公共列表Photopr{get;set;}
公共列表Prod{get;set;}
公共bool Istehsal{get;set;}
}
控制器

  [HttpPost]
    public ActionResult ShopPage(HMViewM model)
    {
        List<Category> selectedcatg = model.catg.Where(x => x.IsChecked == true).ToList();
        List<Product> selectedprod = model.Prod.Where(i => i.CategoryId == selectedcatg.FirstOrDefault().id).ToList();
        var vm = new HMViewM
        {
            Prod = selectedprod,
            catg = _context.Categories.ToList(),
            colrs = _context.Colours.ToList(),
            Photopr = _context.PhotoProducts.Where(ph => ph.Product.id == ph.ImageId).ToList(),
        };
        return View(vm);
    }
[HttpPost]
公共行动结果商店页面(HMViewM模型)
{
列出selectedcatg=model.catg.Where(x=>x.IsChecked==true).ToList();
列出selectedprod=model.Prod.Where(i=>i.CategoryId==selectedcatg.FirstOrDefault().id).ToList();
var vm=new HMViewM
{
Prod=已选择的Prod,
catg=_context.Categories.ToList(),
colrs=\u context.colors.ToList(),
Photopr=\u context.PhotoProducts.Where(ph=>ph.Product.id==ph.ImageId.ToList(),
};
返回视图(vm);
}

这是因为在通过单击submit按钮发布页面后,只有那些属性会返回到您的控制器,您可以显式地将它们绑定到html
input
元素。 绑定在代码中的值是:

@Html.CheckBoxFor(model => model.catg[i].IsChecked)

@Html.HiddenFor(model => model.catg[i].id)
@Html.HiddenFor(model => model.catg[i].CategoryName }
因此,只有这些值填充到控制器
HMViewM
对象中。
如果需要其他值,也应该将它们绑定到html输入元素(使用隐藏字段、文本、复选框…)

谢谢您的回答。我有很多属性。我应该手动编写所有属性还是有其他方法?@Aytac:没有其他方法。一般来说,绑定属性不是一个好主意,因为您不想在
视图中更改属性,因为这会对页面的请求时间产生负面影响,相反,最好只绑定它们的Id和获取他们的其他道具我明白了,谢谢。
@Html.CheckBoxFor(model => model.catg[i].IsChecked)

@Html.HiddenFor(model => model.catg[i].id)
@Html.HiddenFor(model => model.catg[i].CategoryName }