2010-12-09 69 views
1

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

[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; } 
    } 
} 

显示名称被绑定到查看,没有问题,但是当我试图提交的观点,我得到这个错误:

传递到 字典型号产品类型 “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; } 
} 

有你有一个想法? 提前致谢

+0

我是新来的ASP.NET MVC,但从我可以看到你传递的评估对象,而不是ViewModel到你不期待的视图(强类型视图?) – 2010-12-09 17:13:34

回答

1

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

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

如果TryUpdateModel返回false(当表单没有通过验证,例如其中发生)时,实际上是传递data的观点,这是Models.Evaluation类型。

尝试将其映射到FOOBAR.Areas.Evaluation.ViewModels.EvaluationFormViewModel,然后将其传递到视图。

+0

嗯,实际上,我只是试图通过一个商业对象,我需要一个viewModel ...有时候,最好停下来,等待一个新的视图^^ – eka808 2010-12-13 08:38:02