2

jQuery $ .post()メソッドを使用してコントローラー内のメソッドを呼び出していますが、この関数が呼び出されたときにそのメソッドにヒットしていません。jQuery $ .post()メソッドの操作方法を知っている人はいますか?

function OpenDialog(StateCode) { 
    $.post("~/Home/LoadCityViewModel", { 
        stateCode: StateCode }, 
        function () { 
            $("#dialog-modal").dialog("open"); 
        }); 
        return false; 
}

private ListingsViewModel LoadCityViewModel(string stateCode) { return null; }
4

3 に答える 3

2

以外$.post()にもいくつか質問があるので、コードでいくつかの基本的な問題を指定できます。

  1. "~/Home/LoadCityViewModel"は有効なURLではありません。シンボル~/は、Webアプリケーションのルートパス(仮想ディレクトリまたはWebサイトのルート)を指すためにのみASP.NETサーバー側で認識されます。Url.Actionまたはを使用Url.Contentして、URLを解決します。また、指定されたコードが別のjavascriptファイルで宣言されている場合は、設定パラメーターとしてURLを渡すことを検討するか(Razorビューで初期化する)、または単に指定する"/Home/LoadCityViewModel"(WebアプリケーションがWebサイトのルートにデプロイされ、仮想ディレクトリへ)。"Home/LoadCityViewModel"(先頭なしで"/")は「現在の場所から」または「現在のページパスから」を意味し、たとえば別のコントローラーのビューから呼び出す場合は機能しないことに注意してください。

  2. jQuery UI Dialog Widgethttp://jqueryui.com/dialog/でAPIサンプルまたはソースコードを確認してください

  3. return false、関数が常に戻る場合、それは本当に意味がありますfalseか?

  4. コントローラのアクションメソッドは公開する必要があります。

  5. ActionResultActionメソッドは、ではなく、を返す必要があることに注意してくださいViewModel

  6. POST httpメソッドのみを処理するようにアクションを制限する必要がある場合(そのため、jQuery.get()ではなくjQuery.post()選択したと思います)、メソッドに次のマークを付けます。HttpPostAttribute

したがって、これが基本的に必要なものだと思います(Razor Viewのインラインスクリプトの場合):

function OpenDialog(StateCode) { 
    $.post("@Url.Action("LoadCityViewModel", "Home")",
        // it will actually output "/Home/LoadCityViewModel"
        { stateCode: StateCode }, 
        function () { 
            $("#dialog-modal").dialog(); 
        });
}

そしてサーバーコード:

[HttpPost]
public ActionResult LoadCityViewModel(string stateCode) 
{ 
    return Json(null); //Pass your model as a parameter here.
}

冗長なものをたくさん書いたらごめんなさい;)

于 2013-03-25T20:48:02.283 に答える
1

最後に、これは毎回機能する電話をかけるための最も一貫した方法でした。

function OpenDialog(StateCode) {
    $.ajax({
        type: 'POST',
        url: 'Home/LoadCityViewModel',
        data: JSON.stringify({ stateCode: StateCode }),
        contentType: 'application/json; charset=utf-8',
        cash: false,
        success: function () {
            $("#dialog-modal").dialog("open");
        }
    });
    return false;
}

于 2013-03-26T17:53:31.870 に答える
0
            $.Ajax({
                url: path to script,
                success: onSuccess,
                error: onError,
                type: 'POST',
                dataType: "json",
                contentType: "application/json",
                data: JSON.stringify(query)
            });

フォーマットしたいajaxリクエストの例があります。しかし、それは必ずしもあなたの問題ではありません。問題はあなたの方法への道だと思います。たとえば、UserLoginControllerというコントローラーがあるとします。ユーザーログインビューページ(javascriptが存在する場所)から、URLを使用してコントローラーを呼び出します-UserLogin / Validate
基本的に、呼び出すコントローラーとメソッドを指定します。この場合、メソッドであることを検証します。

于 2013-03-25T20:48:44.287 に答える