2011-08-02 13 views
0

私はオンラインアンケートを作成しようとしています。未知数の入力フィールドをViewModelにバインドするにはどうすればよいですか?

私はユーザーが複数の選択肢の質問を作成できる表示方法を用意しています。それぞれの答えは、可能性は、以下の特性を表すテキストボックスを持っていることになっている:私は、ユーザーが望むどのように多くの回答の可能性を知らないとき

[Multiple_Choice_Question] 
int choice_number { get; set; } // The order in which the MCQ answer possibility is shown 
int choice_wording { get; set; } // The MCQ answer possibility 
string help_text { get; set; } // help_text if the user doesnt understand the answer possibility 

は、どのように私のViewModelは、のようになりますか?

おかげ

+0

ジェネリックコレクション? – GalacticCowboy

+0

どういう意味ですか? – Nanek

+0

申し訳ありませんが、私はあなたの質問に誤解しました。私は、さまざまなオプションを使って質問をユーザーに提示するという考えについて話していると思っていました。 – GalacticCowboy

答えて

0

のための私の答えをチェックし、文字列の配列に隠しフィールドの値を分割することにより、テキストボックスの数を取得することができますMVC3のjavascriptとJSONモデルバインディングを使用して、ここでお手伝いしましょう。クライアント側では

回答の可変数を取得するためにDOMを反復処理し、解析するためにJavaScriptを使用すると、サーバー側のオブジェクト

function MultipleChoiceQuestion(choice_number, choice_wording, help_text) 
{ 
    this.ChoiceNumber = choice_number; 
    this.ChoiceWording = choice_wording; 
    this.HelpText = help_text; 
} 

に一致するjavascriptの「オブジェクト」を作成します。

擬似コード...

var ListOfQuestions = []; 
foreach(some dom elements) 
{ 
    var cn = dom.choiceNumber; 
    var cw = dom.choiceWording; 
    var ht = dom.helpText; 

    var question = new MultipleChoiceQuestion(cn, cw, ht); 
    ListOfQuestions.push(question); 

} 

は、Ajaxでこれを投稿してください。この方法の欠点は、ajaxを使用する必要があることです。

$.ajax({ 
    url:"/yoursite/controller/action", 
    type:"POST", 
    data: JSON.stringify(ListOfQuestions), 
    dataType: 'json', 
    contentType: 'application/json, charset=utf-8', 
    success: function(data){}, 
    error: function(){} 

}); 

そして、サーバ側で、あなたはすでにそれを定義してきたように(あなたプロパティ名は、クライアント側のプロパティ名と一致する必要があります)ご質問のクラスがあり、コンテナクラス...

public class QuestionContainer() 
{ 
    public List<MultipleChoiceQuestion> Questions {get; set; 
} 

とあなたの行動は、パラメータ

public ActionResult Create(QuestionContainer questions) 
{ 

    ... 
} 

フィル・ハークは、この記事をしたとして、これがかかりますが、MVC3前にリリースされたバインディング。彼が書いたことよりも今は簡単です。

http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

0

あなたはどのHiddenフィールドで各テキストボックスのために、特定のクラスやIDのプレフィックスを割り当て、1つのカンマ区切りの文字列(またはあなたが望む任意の区切り文字で区切られた)ではJavaScriptを使用して、その値を収集し、その結果を保存することができますあなたのコントローラからアクセスすることができます。配列の長さは、あなたのビューでテキストボックスの数になりますので、あなたは

はsimiler質問here

関連する問題