2012-05-04 14 views
0

を使用していない:コールMVCのアクションメソッドが、私はこのような3つのパラメータでMVC3アクションメソッドを持っているAJAX

var url = "/Question/Insert?" + "_strTitle='" + title + "'&_strContent='" + content + "'&_listTags='" + listTags.toString() + "'"; 

、それはする必要はありませんので、私はないAJAX(通常のJavaScript関数によって、これを呼び出したいです

window.location.assign(url); 

それはQuestionControllerのアクションを挿入するためにジャンプしませんでした:私はこの機能を使用しようとしましたが、それはうまくいきませんでした )AJAX機能を使用します。

誰かが私を助けてくれるのですか?おかげでたくさん

これは、私は、データベースへの新しい質問を挿入する詳細

ですが、私はCKEditorバージョンからデータを取得しなければならないので、私は、データを取得し、検証するために、次のこの機能を使用する必要が

// insert new question 
$("#btnDangCauHoi").click(function() { 
    //validate input data 
    //chủ đề câu hỏi 
    var title = $("#txtTitle").val(); 

    if (title == "") { 
     alert("bạn chưa nhập chủ đề câu hỏi"); 
     return; 
    } 
    //nội dung câu hỏi 
    var content = GetContents(); 
    content = "xyz"; 
    if (content == "") { 
     alert("bạn chưa nhập nội dung câu hỏi"); 
     return; 
    } 
    //danh sách Tag 
    var listTags = new Array(); 
    var Tags = $("#list_tag").children(); 

    if (Tags.length == 0) { 
     alert("bạn chưa chọn tag cho câu hỏi"); 
     return; 
    } 

    for (var i = 0; i < Tags.length; i++) { 
     var id = Tags[i].id; 
     listTags[i] = id; 
     //var e = listTags[i]; 
    } 
    var data = { 
     "_strTitle": title, 
     "_strContent": content, 
     "_listTags": listTags.toString() 
    }; 
    //  $.post(url, data, function (result) { 
    //   alert(result); 
    //  }); 
    var url = "/Question/Insert?" + "_strTitle='" + title + "'&_strContent='" + content + "'&_listTags='" + listTags.toString() + "'"; 
    window.location.assign(url); // I try to use this, and window.location also but they're not working 
}); 

このURLは挿入アクション成功した場合、POSTメソッド

[HttpPost] 
    [ValidateInput(false)] 
    public ActionResult Insert(string _strTitle, string _strContent, string _listTags) 
    { 

     try 
     { 
      //some code here 
     } 
     catch(Exception ex) 
     { 
      //if some error come up 
      ViewBag.Message = ex.Message; 
      return View("Error"); 
     } 
     // if insert new question success 
     return RedirectToAction("Index","Question"); 
    } 

により、以下の "挿入" MVCのアクションを呼び出し、それをrます新しい質問がすでに挿入されているすべての質問をリストするインデックスページへのedirect。そうでない場合は、エラーページが表示されます。だからこそ、私はAJAXを使わない理由です。

何か助けてもらえますか?感謝:)

+0

なぜAJAXを使いたくないですか? – jrummell

+0

エラーが発生しましたか、ページが移動していませんでしたか?コントローラの動作はPOSTかGETですか? – Terry

+0

ルートとアクションメソッドの構文を教えてください。ルーティングが正しくない限り、window.locationは機能するはずです。何かエラーが出ますか? – Ronald

答えて

2

を使用することをお勧めします:

window.location = yourUrl; 

また、バイオリンやいくつかを試してみて、使用他の同様のツールは、リダイレクトが行われるかどうかを確認します。

EDIT:

あなたの行動は、HTTP POSTメソッドを期待しているが、window.locationのを使用すると、GETメソッドの原因となります。それがあなたの行動が決して呼び出されない理由です。

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Insert(string _strTitle, string _strContent, string _listTags) 
{ 
    // Your code 
} 

どちらかHTTPGETへの変更(あなたはいけない)、またはjQueryのまたはPOSTを実行するためにアヤックスをサポートする他のライブラリを使用します。 GETメソッドを使用してデータを更新しないでください。それはあなたが問題に取り組むときにどこから始めるべきか分からないほど多くのセキュリティ問題を引き起こします。

すでにjQueryを使用していることを考慮すれば、Ajaxを使用することもできます。 HTTP POST操作を実行するには、$.post()メソッドを使用します。

$ .post()のコールバック関数内で、エラービューまたはインデックスビューへのリダイレクトを防ぐために、最後にreturn falseを指定することができます。

$.post("your_url", function() { 
    // Do something 

    return false; // prevents redirection 
}); 

それはそれです。あなたは

var url = "/Question/Insert?_strTitle=" + title + "&_strContent=" + content + "&_listTags=" + listTags.toString(); 

var url = "/Question/Insert?" + "_strTitle='" + title + "'&_strContent='" + content + "'&_listTags='" + listTags.toString() + "'"; 

を変更しようとすることができ

+0

これは 'window.location.assign() 'とまったく同じことです –

+0

これは当てはまりますが、.assignが正しく動作しないのに、window.locationがきれいだったChromeのバージョンで問題が発生しました。私はあまりにもそれを気にしたくない理由を考え出したことはありません。私はwindows.location = "url"で最終結果を得た –

+0

ああ、本当に?十分に公正で、 'window.location'はとにかに広く使われています。 –

0

あなたはAJAXを使用しないようにしたい場合は、IFRAMEを使用することができますが、私がしようとAJAX

<iframe src="" id="loader"></iframe> 
<script> 
document.getElementById("loader").src = url; 
</script> 
+0

実際に希望の結果が得られたら、誰がこの回答に投票しますか? – Bloafer

1

彼らが必要としていないように私は、単一引用符を削除しました。

あなたのPHPコードは表示されませんが、問題のある場所を見つけ出すのは簡単ではありません。

「あなたはQuestionControllerのアクションを挿入するようにジャンプしませんでした」と言います。ブラウザがそのページをロードしなかったこと、またはURLがロードされたときに予期されたコントローラ/アクションにルーティングしなかったことを意味しますか?

+0

私はそれが予期されたコントローラ/アクションにルーティングしなかったことを意味します。いくつかのアドバイス、@ジンボですか? –

+0

ブラウザでURLが読み込まれているにもかかわらず、サーバー側のアプリケーションが正しくルーティングされていない場合は、URLがフォーマットされた方法と関係があります。 あなたはURLの挿入部分の後にスラッシュを追加しようとすることができます: '/質問/挿入/ _ strTitle =' 私の経験では、いくつかのMVCフレームワークで、過去に問題を起こしたのか。 私はそれが助けになることを願っています。 – Jimbo

関連する問題