1

HTML ボタンを使用して、ac# クラス メソッドを呼び出そうとしました。別のトピックでは、人々は私に AJAX を使用するようアドバイスしました。私はさまざまなチュートリアルを見て、それを実装しようとしましたが、私にとってはうまくいきません。

今のところ、ボタンにポップアップが表示されるようにしたいだけです(メソッドが呼び出されていることがわかるように)呼び出したいメソッドは、クラス HomeController の setLang(string lang) です

これがonclickイベントの方法です

<input type="submit" onclick="setLanguage();" value="submit">

これはスクリプト部分です。これは同じページにあります

<script type="text/javascript">
function setLanguage() {
var lang = "en";
$.post('@Url.Action("setLang","HomeController")/' + lang,function(){
//i'm not expecting a result to process
});
}
</script>

しかし、ボタンをクリックしても何も起こりません。

私はここで何かを逃していますか?

編集:関数は呼び出されていますが、コールバックはありません

更新:まだ機能していません。これは私の現在のコードです(リクエストによる)

ボタン (index.aspx)

<input type="button" onclick="setLanguage();" value="submit">

関数 (index.aspx)

<script type="text/javascript">
function setLanguage() { 
alert("this message shows");       
    $.post('Url.Action("setLang","Home")/?lang=' + lang,
        function (data) {
            alert("this message does not");
        });
 }
</script>

HomeController.cs で

   public JsonResult setLang(string lang)
    {       
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang);
        .....//a lot more code, until it reaches
        return Json("Language: " + lang);
    }
4

2 に答える 2

2

POST Httpタイプを介してアクションメソッドを呼び出しているため、アクションメソッドもHTTPPostType要求に応答する準備ができていることを確認してください。HttpPostアクションメソッドにアノテーションを追加する必要がある場合があります。

[HttpPost]
public ActionResult setLang(string id)
{
  return Content("MVC is awesome");
}

アクションメソッドからの応答を処理するには、引数を指定してコールバックメソッドを使用します。次の例では、変数のactionメソッドから応答を取得しますdata

<input type="submit" value="submit">
<script type="text/javascript">
 $(function(){

   $("form").submit(function(e){

    e.preventDefault();  // preventing the default form submit behaviour
       var lang="en"
       $.post("@Url.Action("setLang","Home")/" + lang,function(data){
           alert(data);
       });

   });

 });
</script>
于 2012-06-13T12:22:51.557 に答える
2

HomeController の Index ビューに以下を追加します。

<input type="button" onclick="setLanguage();" value="submit">

<script type="text/javascript">
    function setLanguage() {
        var lang = "en";
        $.post('@Url.Action("setLang","Home")/?lang=' + lang,
            function (data) {
                alert(data);
        });
    }
</script>

私はあなたのコードと比較していくつかのことを変更しました:

  • 入力タイプ = ボタン
  • コントローラー名は「HomeController」ではなく「Home」にする必要があります。ASP.NET MVC は、デフォルトで「コントローラー」部分を追加します
  • 成功関数はデータ パラメータを取り、クライアント マシンで JavaScript アラートを実行します。
  • この特定のメソッドにはルートが設定されていないため、lang パラメーターをクエリ文字列の一部に変更しました。

次に、サーバーで次のアクション メソッドを HomeController に追加します。

public JsonResult setLang(string lang)
{
    return Json("Language: " + lang);
}

この関数は lang パラメーターを受け取り、単純な文字列値のみを含む JsonResult を返します。Json は、ブラウザーとサーバーの間でデータを送信するための推奨される方法です。

この例を拡張して、より複雑なデータをブラウザーに返すことができます。

于 2012-06-13T12:17:36.473 に答える