使用viewModel进行模型验证不起作用

时间:2010-12-09 17:07:27

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

我使用viewModels在我的控制器和视图之间进行通信。 要获得模型验证,我使用这样的分部类:

[MetadataType(typeof(EvaluationValidation))]
public partial class Evaluation
{
    public class EvaluationValidation
    {
        [DisplayName("Title of evaluation")]
        [Required( ErrorMessage="Please give a title")]
        public string Title { get; set; }
    }
}

Displayname绑定查看没有问题但是当我尝试提交视图时,我收到此错误:

  

模型项传入   字典是类型   'FOOBAR.Models.Evaluation',   但这本词典需要一个模型   类型的项目   'FOOBAR.Areas.Evaluation.ViewModels.EvaluationFormViewModel'。

这是我的控制器中使用的代码

    [HttpPost]
    public ActionResult Create(FormCollection formValues)
    {
        Models.Evaluation data = new Models.Evaluation();
        if (TryUpdateModel(data, "evaluations"))
        {
            this.daoe.Create(data);
            return RedirectToAction("Index");
        }
        return View(data);
    }

这是我的viewModel

public class EvaluationFormViewModel
{
    public FOOBAR.Models.Evaluation evaluations;
    public SelectList selectlist_evaluationtypes { get; set; }
    public SelectList selectlist_evaluationstatus { get; set; }
}

你有个主意吗? 感谢提前

1 个答案:

答案 0 :(得分:1)

您正在将Models.Evaluation实例传递给您的视图,该视图绑定到另一种类型的模型。

Models.Evaluation data = new Models.Evaluation();
if (TryUpdateModel(data, "evaluations"))
{
   // ...
}
return View(data);

如果TryUpdateModel返回false(例如,当表单未通过验证时会发生这种情况),您实际上是将data传递给View {{1} }}

尝试将其映射到Models.Evaluation类型,然后再将其传递给视图。