【发布时间】:2018-03-04 05:11:59
【问题描述】:
我有一个问题,我将两个模型传递到一个视图模型中。在特定视图中,我只想检查两个属性的验证,一个来自视图模型中的每个模型。
但是,这两个模型都包含其他属性,每个属性都有自己的数据注释,这意味着在满足所有注释之前表单不会提交,即使它们不在表单上。
所以我需要找到一种方法,只检查两个模型中特定属性的验证,但如果它通过验证检查,仍然将整个对象保存到数据库中。
代码示例
型号
public class FirstModel
{
public int Id { get; set; }
[Required]
public string Prop2 { get; set; }
[Required]
public DateTime Prop3 { get; set; }
}
public class SecondModel
{
public int Id { get; set; }
[Required]
public string Prop2 { get; set; }
[Required]
public int Prop3 { get; set; }
}
public class ThirdModel
{
public int Id { get; set; }
[Required]
public FirstModel FirstModel { get; set; }
[Required]
public SecondModel SecondModel { get; set; }
}
查看模型
public class ThirdFormViewModel
{
// maybe I can do something here?
public FirstModel FirstModel { get; set; }
public SecondModel SecondModel { get; set; }
}
控制器发布操作
[HttpPost]
public ActionResult CreateThirdModel(ThirdModel newThirdModel)
{
var firstModel = _context.FirstModels.Single(c => c.Id == newThirdModel.Id);
var secondModel = _context.SecondModels.Single(c => c.Id == newThirdModel.SecondModel.Id);
if (!ModelState.IsValid)
{
var viewModel = new ThirdFormViewModel
{
FirstModel = firstModel,
SecondModel = secondModel
};
return View("ThirdModelForm", viewModel);
}
var thirdModel = new ThirdModel
{
FirstModel = firstModel,
SecondModel = secondModel,
};
_context.ThirdModels.Add(thirdModel);
_context.SaveChanges();
return RedirectToAction("Index");
}
查看
@model MyProject.ViewModels.ThirdFormViewModel
@using (Html.BeginForm()
{
<div class="form-group">
@Html.TextBoxFor(m => m.FirstModel.Prop2)
</div>
<div class="form-group">
@Html.TextBoxFor(m => m.SecondModel.Prop3)
</div>
<button type="submit" class="btn btn-primary">Save</button>
}
【问题讨论】:
-
创建一个仅包含视图中所需属性的视图模型 - 参考What is ViewModel in MVC?(并且视图模型不包含数据模型)
标签: c# asp.net asp.net-mvc viewmodel