【问题标题】:Validation of ViewModel throws exceptionViewModel 的验证抛出异常
【发布时间】:2010-03-04 14:36:29
【问题描述】:

我有一个包含产品和 SelectList 类别的视图模型。

public class AdFormViewModel
{
    public AmericanAds.Model.Ad Ad { get; set; }
    public SelectList Categories { get; set; }

    public AdFormViewModel(AmericanAds.Model.Ad ad, SelectList categories)
    {
        Ad = ad;
        Categories = categories;
    }
}

添加新产品时,如果类别下拉列表验证失败,我会收到以下错误消息。

传入字典的模型项是“AmericanAds.Model.Ad”类型,但该字典需要一个“AmericanAds.Controllers.AdFormViewModel”类型的模型项。

这里是创建动作的控制器。

public ActionResult Create()
    {
        AdFormViewModel data = new AdFormViewModel(
            null,
            new SelectList(_repository.CategoryList().ToList(), "CategoryId", "CategoryName")
            );

        return View(data);
    } 

    //
    // POST: /Ad/Create

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(Ad ad)
    {
        if (ModelState.IsValid)
        {
            try
            {
                _repository.AddAd(ad);

                return RedirectToAction("Index");
            }
            catch
            {
                return View(ad);
            }
        }
        else
        {
            return View(ad);
        }
    }

我错过了什么?

如您所知,我对 ASP.Net MVC 非常陌生。

谢谢!

【问题讨论】:

  • 这是 asp.net-mvc 2 吗?否则,您正在运行哪个验证引擎?你能告诉我们一些视图标记和失败的操作吗?
  • 它是 mvc 1.0。我将在帖子中添加一些代码
  • 出于好奇,在这种情况下,下拉菜单的验证怎么会失败?它有时会工作有时会失败吗?如果是这样,每次的输入是什么?它总是失败吗?如果是在哪一行?
  • 在视图中,下拉列表定义为 所以如果用户没有选择一个值并将其保留为“请选择”则验证失败。随着 Cagdas 的发现,问题与验证无关,当模型状态无效时,我没有返回 ViewModel 对象。

标签: asp.net-mvc validation viewmodel


【解决方案1】:

这是因为您的 Create 视图需要 AdFormViewModel 类型的模型,但在您的 Create 操作(具有 [AcceptVerbs(HttpVerbs.Post)] 属性的那个)中,您返回了 Ad 类型的模型(请参阅它所在的行说return View(ad))。

就像异常消息说的那样;它需要AmericanAds.Controllers.AdFormViewModel,但您发送的是AmericanAds.Model.Ad

不,我认为这与验证无关。

【讨论】:

    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 2013-06-29
    • 2015-11-14
    • 2021-09-14
    相关资源
    最近更新 更多