[英]ASP.NET MVC Model Binding in Complex ViewModel Object
这是我的复杂ViewModel
public class OperationStudyInputViewModel
{
public OperationStudy OperationStudy { get; set; }
public FileUpload FileUploads { get; set; }
public IEnumerable<string> Attachments { get; set; }
public IEnumerable<string> Folders { get; set; }
}
这是OperationStudy模型
public class OperationStudy
{
public int OperationStudyId { get; set; }
public string SpCategoryId { get; set; }
//Here is some Other Properties
}
这是OperationStudyInput()发布方法
[HttpPost]
public ActionResult OperationStudyInput([Bind(Exclude = "SpCategoryId")] OperationStudyInputViewModel inputViewModel, IEnumerable<HttpPostedFileBase> multiplefiles)
{
// some Necessary codes Here
_dbContext.OperationStudies.Add(inputViewModel.OperationStudy);
_dbContext.SaveChanges();
}
我想排除SpCategoryId
在inputViewModel(inputViewModel.OperationStudy)在OperationStudyInput(从OperationStudy)发表mehtod。 我已经尝试了前面的代码,但是它没有按预期工作!
任何帮助请!
我建议区分视图模型和数据模型。 如果您直接返回,则可能会导致意外的安全问题(突然在后端添加字段将导致该字段暴露于Web)。 因此,我要做的就是创建许多Web模型,例如,可以在Web后面添加后缀,并在每次需要返回时进行映射。
这将在视图层和BI层之间提供良好的隔离。 为了帮助您实现这一目标,可以使用诸如AutoMapper
框架。 这不是必需的,但可以帮助您进行粗略映射。
您可能会认为这是一个矫kill过正的方法,但是请相信我,从长远来看,您将看到这种方法的优点。 您也可以在Google上搜索有关分离主题的更多信息。
PS:我不会建议从其他模型中删除从模型中删除数据的任何技巧。 这对我来说似乎是一种非常脆弱的方法。
您可以像这样在类上指定Bind属性:
[Bind(Exclude = "SpCategoryId")]
public class OperationStudy
{
public int OperationStudyId { get; set; }
public string SpCategoryId { get; set; }
}
但是,我建议创建并使用单独的ViewModel进行绑定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.