繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM