0

次のような 3 つのパラメーターを持つ MVC3 アクション メソッドがあります。

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

そして、これをAJAXではなく通常のJavaScript関数で呼び出したい(AJAX関数を使用する必要がないため)この関数を使用しようとしましたが、機能しませんでした:

window.location.assign(url);

QuestionController の Insert アクションにジャンプしませんでした。

私を助けてくれる人はいますか?どうもありがとう

詳しくはこちら

新しい質問をデータベースに挿入したいのですが、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 メソッドで以下の MVC アクション「Insert」を呼び出します

    [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");
    }

挿入アクションが成功すると、新しい質問を含むすべての質問が既に挿入されているインデックス ページにリダイレクトされます。そうでない場合は、エラーページが表示されます。だから、私はAJAXを使用していません

誰か助けてくれませんか?ありがとう :)

4

3 に答える 3

2

試す:

window.location = yourUrl;

また、Fiddlerまたは他の同様のツールを使用して、リダイレクトが行われるかどうかを確認してください。

編集:

アクションはHTTPPOSTメソッドを期待していますが、window.locationを使用するとGETメソッドが発生します。それがあなたの行動が決して呼ばれない理由です。

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

POSTを実行するには、HttpGetに変更するか(すべきではありません)、jQueryまたはAjaxをサポートする他のライブラリを使用します。GETメソッドを使用してデータを更新しないでください。それはあなたにとって非常に多くのセキュリティ問題を引き起こすので、問題に取り組むときにどこから始めればよいのかわからないでしょう。

すでにjQueryを使用していることを考えると、ずっと進んでAjaxを使用したほうがよいでしょう。メソッドを使用$.post()してHTTPPOST操作を実行します。

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

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

    return false; // prevents redirection
});

それについてです。

于 2012-05-04T14:34:43.817 に答える
1

変更してみることができます

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

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

一重引用符は不要なので削除しました。

問題がどこにあるかを突き止めるのは簡単ではありませんが、php コードを見なければ。

「QuestionControllerのInsertアクションにジャンプしなかった」という場合。ブラウザがそのページをロードしなかったということですか、それとも URL がロードされたときに予期されたコントローラ/アクションにルーティングされなかったということですか?

于 2012-05-04T14:37:19.103 に答える
0

AJAX を使用したくない場合は iframe を使用できますが、AJAX を使用することをお勧めします。

<iframe src="" id="loader"></iframe>
<script>
document.getElementById("loader").src = url;
</script>
于 2012-05-04T14:32:21.430 に答える