2017-12-19 22 views
1

ajaxには少し問題があります。だから私はあなたに私の行動を示すつもりです。AjaxはフォームIDをMVCコントローラに送信できません

フォーム:

<form id="QuestionForm"> 
    @Html.TextBoxFor(model => model.Body, new { @class = "form-control", @placeholder = "Body" }) 
    @Html.TextBoxFor(model => model.Text, new { @class = "form-control", @placeholder = "Text" }) 
</form> 

ここに私のスクリプトとAjaxコードです:

$("#btnSubmit").click(function() { 
    var data = $('#QuestionForm').serialize(); 

    $.ajax({ 
     type: "POST", 
     url: "/Survey/AddQuestion", 
     data: {data, @Model.Survey.Id}, 
     success: function() { 
      $("#AddQuestion").modal("hide"); 
      //alert("Survey Added"); 
      location.reload(); 
     } 
    }) 

}) 

ここに私のコントローラのアクションがあります:

public JsonResult AddQuestion(SurveyQuestion model, int id) 
{ 
    SurveyQuestion question = new SurveyQuestion(); 
    question.Body = model.Body; 
    question.CreatedOn = DateTime.Now; 
    question.ModifiedOn = DateTime.Now; 
    question.Priority = 0; 
    question.SurveyId = id; 
    question.Text = model.Text; 
    question.Type = QuestionType.Text; 

    _db.SurveyQuestions.Add(question); 
    _db.SaveChanges(); 
    return Json(question, JsonRequestBehavior.AllowGet); 
} 

私は、コードのすべての部分に必要事項を記入しませんでした後でその処理を行うつもりであるため、その一部はハードコードされています。しかし、問題は2つのことを送信することです。 IDを送信してコントローラからIDを削除しないと、シリアル化されたモデルはうまく送信されますが、両方を送信するとIDが取得されますが、無効である)。これをどうやって解決するのですか?

+0

あなたは – Krishjs

+0

ができるクエリ文字列としてIDを渡すことができないポストに複数のパラメータを渡して、これを試してみてくださいか、クエリ文字列を使用して渡すことができますあなたはそれを答えとして貼り付けてください? – HighSepton

+0

ありがとうございました。FromUri – Krishjs

答えて

2

あなたは以下のようにそれを行うことができます。

$("#btnSubmit").click(function() { 

    $.ajax({ 
     type: "POST", 
     url: "/Survey/AddQuestion", 
     // Add id like query string parameter like below 
     data: $('#QuestionForm').serialize() + '&id=' + @Model.Survey.Id, 
     success: function() { 
      $("#AddQuestion").modal("hide"); 
      //alert("Survey Added"); 
      location.reload(); 
     } 
    }) 
}) 
+0

が完璧に追加できます!ありがとう! – HighSepton

+0

@HighSeptonあなたは大歓迎です:) –

+0

@Krishjsあなたは正しいです、私は私のコメントを編集しました。 –

0

はあなたがURLにIDを入れることができます

$("#btnSubmit").click(function() { 
    var data = $('#QuestionForm').serialize(); 

    $.ajax({ 
    type: "POST", 
    url: "/Survey/[email protected]", 
    data: {data}, 
    success: function() { 
     $("#AddQuestion").modal("hide"); 
     //alert("Survey Added"); 
     location.reload(); 
    } 
    }) 

}) 
+0

これは動作しません。 – HighSepton

+0

申し訳ありませんが、私はidパラが "背後にあるのを忘れていますか?"、 – Hyeongo

1

パスIDコントローラの使用FromUriでクエリ文字列パラメータ

$("#btnSubmit").click(function() { 
    var data = $('#QuestionForm').serialize(); 

    $.ajax({ 
    type: "POST", 
    url: "/Survey/AddQuestion?id=" + '@Model.Survey.Id', 
    data: {data, @Model.Survey.Id}, 
    success: function() { 
     $("#AddQuestion").modal("hide"); 
     //alert("Survey Added"); 
     location.reload(); 
    } 
}) 
}) 

としてパラメータの前の属性

他の回答

$("#btnSubmit").click(function() { 
    var data = $('#QuestionForm').serialize(); 

    $.ajax({ 
     type: "POST", 
     url: "/Survey/AddQuestion", 
     data: {model : data, id: @Model.Survey.Id}, 
     success: function() { 
      $("#AddQuestion").modal("hide"); 
      //alert("Survey Added"); 
      location.reload(); 
     } 
    }) 

}) 

コントローラーに示すよう

public JsonResult AddQuestion(SurveyQuestion model,[FromUri]int id) 
{ 

    SurveyQuestion question = new SurveyQuestion(); 
    question.Body = model.Body; 
    question.CreatedOn = DateTime.Now; 
    question.ModifiedOn = DateTime.Now; 
    question.Priority = 0; 
    question.SurveyId = id; 
    question.Text = model.Text; 
    question.Type = QuestionType.Text; 

    _db.SurveyQuestions.Add(question); 
    _db.SaveChanges(); 
    return Json(question, JsonRequestBehavior.AllowGet); 
} 
0

public ActionResult ActionName(SurveyQuestion model, int id) 
{ 
    Your Code ....... 
} 
+0

はうまくいきませんでしたが、私はすでに質問に答えました。 – HighSepton

関連する問題