【问题标题】:mvc2 "no parameterless constructor defined for this object" errormvc2“没有为此对象定义无参数构造函数”错误
【发布时间】:2012-02-27 05:55:01
【问题描述】:

我知道以前在很多场合都被问过,但是当这种情况发生在我身上时我有点困惑......

我有一个这样的视图模型:

public class RAssessment
    {
        [HiddenInput]
        public string rid { get; set; }

        [HiddenInput]
        public string NextPageAction { get; set; }

        [HiddenInput]
        public string PrevPageAction { get; set; }

        [HiddenInput]
        public string CodeType { get; set; }

        public MultiSelectList CA { get; set; }

        public MultiSelectList NonCA { get; set; }

        public List<SelectListItem> AXM { get; set; }

        public List<SelectListItem> IntOrders { get; set; }

        public List<SelectListItem> IntLang { get; set; }

        public List<SelectListItem> IntLang2 { get; set; }


        //Get RAssessment details
        public RAssessment(int id)
        {
            //get details
        }


        public RAssessment()
        {

        }

}

还有一个简单的 get 和 post 控制器操作,如下所示:

[HttpGet]
        public ActionResult RAssessment(int id)
        {
            RAssessment ra = new RAssessment(id);            
            return View("RAssessment", ra);            
        }

        [HttpPost]
        public ActionResult RAssessment(RAsessment ra, FormCollection formdata)
        {            
            if (ModelState.IsValid)  
            {
                :
                return RedirectToAction(blah);
            }
            return View();
        }

在我的页面视图中......它有页面声明:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/MasterPage/Template.Master" Inherits="System.Web.Mvc.ViewPage<xxxx.Models.RAssessment>" %>

当视图上发生提交时,它会调用 actionresult RAssessment,但由于某种原因,它给了我臭名昭著的“没有为此对象定义无参数构造函数”。 (我知道同时传递模型和表单集合听起来很奇怪,但在这种情况下我确实需要这样做)。这种情况的正常答案是“因为你没有在你的模型中为 RAssessment 创建一个构造函数”,但是正如你在我的模型中看到的那样,我已经完成了它,当我在空模型构造函数中放置一个故障时,actionresult 确实去了那里。如果我删除 actionresult 中的 RAssessment 参数,它确实有效,但我确实想在 actionresult 中传递模型数据,然后执行一些复杂的模型验证。谁能告诉我正确的方向?谢谢。 WML

【问题讨论】:

    标签: c# asp.net-mvc parameters formcollection


    【解决方案1】:

    如果MultiSelectList 有无参数构造函数,或者您将在视图模型上方添加[Bind(Exclude="NonCA, CA")],我认为您将摆脱错误。然后,当在标有 [HttpPost] 的操作中发生绑定时,您将获得这些属性 null。

    所有这一切的原因是,当您拥有 HttpPost 时,它会尝试重新创建 RAssessment ra 以及其中的所有属性/字段,并使用隐藏字段、文本字段等提供的值。不幸的是,目前它无法重新创建- 创建 NonCA 和/或 CA。

    如果您查看 MSDN,您会发现 MultiSelectList 没有无参数构造函数。

    【讨论】:

    • 如果我使用 Bind exclude 它确实可以解决问题,但是如果有任何模型验证错误,我如何将多选列表数据“重新填充”回模型?我是否必须再次从头开始创建多选列表?谢谢
    • 您可以从 FormCollection 获取或让模型绑定工作ittecture.wordpress.com/2009/04/30/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多