这是我的复杂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();
}
我想在 OperationStudyInput()发布mehtod中的inputViewModel(inputViewModel.OperationStudy) 中排除{strong> OperationStudy中的SpCategoryId
。我尝试过以前的代码,但它没有按预期工作!!
请帮助!!
答案 0 :(得分:1)
我建议区分您拥有的视图模型和数据模型。如果直接返回则会导致意外的安全问题(突然在后端添加字段会导致此字段暴露给Web)。所以我要做的是创建一些Web模型,您可以使用Web后缀,例如并在每次需要返回时进行映射。
这将在您的视图和BI层之间提供良好的分离。为了帮助您实现这一目标,您可以使用AutoMapper
等框架。没有必要,但可以帮助您进行粗略映射。
你可能认为这是一种矫枉过正,但相信我,从长远来看,你会看到这种方法的优点。您也可以在谷歌上搜索更多关于分离主题的内容。
P.S。我不建议任何黑客从其他帖子中建议的模型中删除数据。这对我来说似乎是一种非常脆弱的方法。
答案 1 :(得分:0)
您可以在类上指定Bind属性,如下所示:
[Bind(Exclude = "SpCategoryId")]
public class OperationStudy
{
public int OperationStudyId { get; set; }
public string SpCategoryId { get; set; }
}
但是,我建议创建并使用单独的ViewModel进行绑定。