2017-10-24 5 views
0

申し訳ありませんが、私は重複した質問かもしれません。 私は既に情報を作りましたが、本当にその方法を知らないのです。どのように配列からビューに渡すことができますか?

ビューからコントローラに配列を渡したいと思います。以下は、私は、このようななどanswerArray[0]answerArray[1]、として、私はボタン提出し、コントローラにアレイを示したときので、コントローラに配列を渡す方法がわからない配列としてanswerArray[@answerNo]を使用

@using (Html.BeginForm("FinishExam", "Exams")) 
{ 
    @Html.AntiForgeryToken() 

    List<int> answerArray = new List<int>(); 

    for (var i = 0; i <= examMulQuestion.Count - 1; i = i + 3) 
    { 
     int questionId = examMulQuestion[i].questionId; 

      <h4> @questionNo . @examMulQuestion[i].questionContent</h4> 
     questionNo++; 

      <li style=""> 
       <input type="radio" name="answerArray[@answerNo]" value="@examMulQuestion[i].answerId">  @examMulQuestion[i].answerContent <br /> 
       <input type="radio" name="answerArray[@answerNo]" value="@examMulQuestion[i + 1].answerId"> @examMulQuestion[i + 1].answerContent <br /> 
       <input type="radio" name="answerArray[@answerNo]" value="@examMulQuestion[i + 2].answerId"> @examMulQuestion[i + 2].answerContent 
      </li> 
     answerNo++; 
     <br /><br /> 
    } 
} 

<input id="submitButton" type="submit" value="submit" class="btn btn-default"> 

コードがあります私はAJAXを使用しようとしたnull

public ActionResult FinishExam(List<int> answerArray) (shows null) 
{ 
    return View(); 
} 

ですが、私はそれを行う方法を知らない初心者です。

function submit() { 
    $.ajax({ 
     url: ('/Exams/FinishExam'), 
     type: 'POST', 
     data: answerArray, 
     dataType: 'JSON' 
    }); 
} 

私に方法を教えてもらえますか?本当にありがとう!!

+0

'answerArray'は何ですか?あなたはそのコードを表示することはできますか? – CodingYoshi

+0

私はjsコードでanswerArrayを宣言していませんが、ビューでは、コードはList answerArray = new List ()です。 –

+0

コントローラーのPOSTメソッドで 'List answerArray'が' null'になる唯一の方法は、最初のグループ( 'DefaultModelBinder'必要なコレクションインデクサーが0から始まり連続しています)のラジオボタンを選択しなかった場合です。 –

答えて

0

これはあなたの状態を満たすと思います。よろしくお願いします。

      var id=new Array(); 
          $.each($(".listCheckBox"), function(i){ 

           if($(this).prop('checked')==true){ 

            var splitid = $(this).val(); 
            var splittedid = splitid.split('~-1~-1`'); 
           id.push(splittedid[0]); 

           } 
         }); 
+0

はこのコードを関数submit()に入れて元のコードを置き換えて、関数を

+0

このコードをjqueryの関数に入れ、その関数をsubmit関数のonClickで実行することができます。そして、このコードを関数に入れた後、あなたのすべてのデータをコントローラに送るためにajaxを実行します。メソッドをajaxのデータにプッシュしてコントローラに渡します。あなたの作業は完了し、問題があれば教えてください。 –

0

問題は、answerArrayは、サーバーのバックエンドコードでのみアクセスできることです。 JavaScriptからアクセスすることはできません。デバッガ(Chromeデバッガまたは別のウェブデバッガ)を使用すると、answerArrayが定義されていないことがわかります。ここでは、必要なものを達成する方法の1つです。あなたのビューでは、このコードを追加します。

<script> 
    var answerArray = 
     @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(answerArray)); 
</script> 

今では、C#の変数answerArrayをシリアル化し、answerArrayという名前のJavaScriptの変数に代入します。その後、JavaScriptで使用することができます。

0

私の提案です。

まず、あなたのこのページ表示のためのモデルやビューモデルを作成します。

public class ExamModel 
{ 

    public virtual string questionContent { get; set; } 

    public virtual int questionId { get; set; } 

    public virtual int answerId { get; set; } 

    public virtual string answerContent { get; set; } 
} 

そして、ビューをレンダリングする前に、それを移入:

public ActionResult Index() 
    { 
     IList<ExamModel> lstModel = new List<ExamModel>(); 
     lstModel.Add(new ExamModel() 
     { 
      questionContent = "Test Question1", 
      questionId = 1, 
      answerId = 101, 
      answerContent = "Answer Test101" 
     }); 
     lstModel.Add(new ExamModel() 
     { 
      questionContent = "Test Question2", 
      questionId = 2, 
      answerId = 102, 
      answerContent = "Answer Test102" 
     }); 

     return View(lstModel); 
    } 

は、使用してかみそりビューに渡す:

@model IList<SPiGlobal.PR.Web.Models.ExamModel> 

あなたのforループで:

01そのBeginForm外のときには、私のために働いていないので、あなたがボタンを提出してください
@using (Html.BeginForm("FinishExam", "SO")) 
{ 
@Html.AntiForgeryToken() 

for (var i = 0; i <= Model.Count - 1; i++){ 
    <div class="editor-label"> 
     @Model[i].questionContent 
    </div> 

    <div class="editor-field"> 
     @Html.RadioButtonFor(model => model[i].answerId, Model[i].answerId, true) @examMulQuestion[i].answerContent 
    </div> 
    } 
<input id="submitButton" type="submit" value="submit" class="btn btn-default"> 
} 

テイク・ノートでは、あなたのBeginForm内にある:

<input id="submitButton" type="submit" value="submit" class="btn btn-default"> 

これは単なる提案で、ここでのポストバックのスクリーンショットは、次のとおりです。あなたのJSコードで

enter image description here

関連する問題