1

私はそれが多くの機会で以前に尋ねられたことを知っています、しかしこれが私に起こるとき私は少し混乱しています....

私はこのようなビューモデルを持っています:

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

4

1 に答える 1

2

パラメーターのないコンストラクターがある場合、またはビューモデルの上にMultiSelectList追加する場合は、エラーを取り除くことができると思います。[Bind(Exclude="NonCA, CA")]次に、。でマークされたアクションでバインディングが発生すると、これらのプロパティはnullになります[HttpPost]

このすべての理由は、非表示フィールド、テキストフィールドなどで提供される値を使用して、その中のすべてのプロパティ/フィールドHttpPostを再作成しようとするためRAssessment raです。残念ながら、現在、NonCAやCAを再作成することはできません。

MSDNを確認すると、MultiSelectListにパラメーターなしのコンストラクターがないことがわかります。

于 2012-02-27T06:28:56.047 に答える