【问题标题】:Model validation with viewModel don't works使用 viewModel 进行模型验证不起作用
【发布时间】:2010-12-09 17:07:27
【问题描述】:

我使用 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);
    }

这是我的视图模型

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

你有想法吗? 提前致谢

【问题讨论】:

  • 我是 ASP.NET MVC 的新手,但据我所知,您正在将评估对象而不是 ViewModel 传递到它不期望的视图中(强类型视图?)

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


【解决方案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

【讨论】:

  • 嗯,事实上,我只是想传递一个需要viewModel的业务对象...有时,最好停止一切并等待新的视图^^
猜你喜欢
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多