复杂ViewModel对象中的ASP.NET MVC模型绑定

时间:2017-02-26 08:37:12

标签: c# asp.net-mvc entity-framework model-binding

这是我的复杂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。我尝试过以前的代码,但它没有按预期工作!!

请帮助!!

2 个答案:

答案 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进行绑定。