gpt4 book ai didi

c# - ViewModel 上的 MVC2 DataAnnotations - 不理解将它与 MVVM 模式一起使用

转载 作者:行者123 更新时间:2023-11-30 18:08:45 25 4
gpt4 key购买 nike

我有一个使用 MVVM 模式的 MVC2 应用程序。我正在尝试使用数据注释来验证表单输入。

在我的 ThingsController 中,我有两种方法:

    [HttpGet]
public ActionResult Index()
{
return View();
}

public ActionResult Details(ThingsViewModel tvm)
{
if (!ModelState.IsValid) return View(tvm);

try
{
Query q = new Query(tvm.Query);
ThingRepository repository = new ThingRepository(q);

tvm.Things = repository.All();
return View(tvm);
}
catch (Exception)
{
return View();
}
}

我的 Details.aspx View 是 ThingsViewModel 的强类型:

<%@ Page Title="" 
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<Config.Web.Models.ThingsViewModel>" %>

ViewModel 是一个类,由返回的 Thing 对象的 IList 和查询字符串(在表单上提交)组成,并具有 Required 数据注释:

public class ThingsViewModel
{
public IList<Thing> Things{ get; set; }

[Required(ErrorMessage="You must enter a query")]
public string Query { get; set; }
}

当我运行它,并在没有输入值的情况下单击表单上的提交按钮时,我得到一个 YSOD 并显示以下错误:

The model item passed into the dictionary is of type 
'Config.Web.Models.ThingsViewModel', but this dictionary
requires a model item of type
System.Collections.Generic.IEnumerable`1[Config.Domain.Entities.Thing]'.

如何让数据注释与 ViewModel 一起工作?我看不出我遗漏了什么或哪里出错了 - 在我开始进行验证之前,VM 工作得很好。

最佳答案

我认为问题不在于验证。

改变这一行;

tvm.Things = repository.All(); //Is this the Linq extension method 'All()'?

对此

tvm.Things = repository.ToList();

我不知道这是什么,也不知道它有什么作用;

new ThingRepository(q);

它接受一个字符串参数并返回某种 Linq IQueriable 或 List?如果返回的是其他内容,则可能是问题所在。

关于c# - ViewModel 上的 MVC2 DataAnnotations - 不理解将它与 MVVM 模式一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com