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按钮发布页面后,只有那些属性会返回到您的控制器,您可以显式地将它们绑定到htmlinput
元素。
绑定在代码中的值是:
@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 }