2009-07-31 20 views
3

ASP.NET MVCを使い始めたばかりで、既に不安を抱えています。asp.net mvc:カスタムViewModelフォーム投稿

状況には、ビューに渡すカスタムViewModelがあります。このビューには、(jQueryの星評価を使用する)評価項目のリストが含まれているため、ラジオボタンヘルパーを使用して作成されます。同じ名前、ちょうど異なる値、これらは問題にはなりません。

私は、しかし、実際に私の行動の後のバージョンにそれを取り戻すためにどのように絶対にないアイデアを持っていません。私はちょうど 'パラメータなしコンストラクタ'エラーを取得します。フォームコレクションを使用したくない - データをクラスベースのままにしたい。

誰も同じようなことをしなければなりませんでしたか?

アドバイスをいただき、ありがとうございます。

============================================== =========================

UPDATE(基本的なコードが含まれています):

In the HomeController: 

    public class MyViewModel 
    { 
     public MyViewModel(List<Thing> things) // Thing.cs contains properties name and rating 
     { 
      this.Things = things;   
     } 

     public List<Thing> Things { get; private set; } 
    } 


    public ActionResult Index() 
    { 
     List<Thing> things = new List<Thing>(); 

     Thing t; 

     t = new Thing(); 
     t.name = "One"; 
     t.rating = 1; 
     things.Add(t); 

     t = new Thing(); 
     t.name = "Two"; 
     t.rating = 2; 
     things.Add(t); 

     return View(new MyViewModel(things)); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Index(MyViewModel vm) 
    { 
     return View(); 
    }  

    and in the Index page (Inherits="System.Web.Mvc.ViewPage<MyProject.Controllers.MyViewModel>") 

<% using (Html.BeginForm()) 
    {%> 
    <ul> 
    <% for(int t = 0; t<Model.Things.Count; t++) 
     {%> 
      <li> 
       <% for (int i = 1; i < 6; i++) 
        { 
         MyProject.Thing thing = Model.Things[i]; 
         %> 
       <%=Html.RadioButton(String.Format("Things[{0}]", t), i)%> 
        <% } %> 

      </li> 
    <% }%> 
    </ul>  
    <input type="submit" value="submit me" /> 
<% } %>    

答えて

3

ViewModelにパラメータのないコンストラクタを使用してみてください。また、プロパティの名前は、コントロールの名前/ IDと一致する必要があります。

あなたが少しを簡素化する、あるいはあなたが自分のモデルバインダーをしている記述する必要があります。

モデルバインダーとその使用の説明here

モデルバインダーhereを書くには良い記事。

私はあなたが複合型の配列を構築しようとしているので、あなたがあなた自身のバインダーを記述する必要がありますだと思います。それ自身の複合型はうまくいくでしょう、それは配列内で問題が始まる場所です。

幸運を祈る!

+0

ああ、甘い、甘い香りの成功... 私はカスタムモデルのバインダーを使用するような複雑な作業は必要ありませんでした。インデックスに間違ったプロパティ名ウサギのループ。 それは難しくないと知っていた... これで、デフォルトのラジオボタンを持つ方法を理解するだけで、検証する必要はありません。 乾杯! – Paul

+0

np、幸運(: – Kieron

0

をフォームがポストされ、のみ選択したラジオボタンの値がサーバーにポストバックされます。

UpdateModel()メソッドを使用すると、フォームから返送された値でモデルクラスを自動的に更新することができます。

+0

私はその点にも到達できません。 投稿のアクションでは、ビューに与えたクラスのインスタンスを渡していますが、フォームが送信されると、ランタイムエラーが発生します。 – Paul

+0

コードを投稿できますか?これはおそらく少し関係のない問題です。 – womp