0

ページにドロップダウンリストとテキストボックスがあります。テキストボックスを変更してドロップダウンリストを変更したいと思います。私は次のようなJQuery投稿を使用します:

$("#txtBuildId").change(function() { var builddate = $("#txtBuildId").val(); $.post("/UTOverview/Index?builddate=" + builddate); });

私のインデックス関数は次のとおりです。

public ActionResult Index()
    {
        string buildDate = Request.Params.Get("builddate");
        DataTable tbBuildid = DatabaseService.getBuilidByDate(buildDate);
        List<SelectListItem> list = new List<SelectListItem>();
        foreach (DataRow bd in tbBuildid.Rows as IEnumerable)
        {
            list.Add(new SelectListItem { Text = bd["buildid"].ToString(), Value = bd["buildid"].ToString() });
        }
        ViewData["tbbuildid"] = list;
        return View();
    }

しかし、ドロップダウンリストはDataView ["tbbuildid"]の変更によって変更されなかったことがわかりましたか?なんで ?

私はこれを次のような完全なポストバック方法で実行しようとしますwindow.location = "/UTOverview/Index?builddate=" + builddate;。ViewData ["tbbuildid"]は、新しいビルド日付をメソッドインデックスに投稿するたびに変更されます。しかし、Ajaxの方法でこれを行うにはどうすればよいですか?

4

3 に答える 3

1

Actionメソッドでは、ビューを返していますが、これに対するビューはありますか?この場合、actionメソッドからJsonを返すだけです。

JsonActionメソッドから戻って、それを使用してドロップダウにデータを入力するだけです。Http Post呼び出しを行っているため、HTTPPostActionメソッドにヒットします

[HttpPost]
public ActionResult Index()
{
        string buildDate = Request.Params.Get("builddate");
        DataTable tbBuildid = DatabaseService.getBuilidByDate(buildDate);
        List<SelectListItem> list = new List<SelectListItem>();
        foreach (DataRow bd in tbBuildid.Rows as IEnumerable)
        {
            list.Add(new SelectListItem { Text = bd["buildid"].ToString(), Value = bd["buildid"].ToString() });
        }
        return Json(list);
}

そして、あなたのスクリプトでは、

    $("#txtBuildId").change(function () {
        var builddate = $("#txtBuildId").val();
        $.post("@Url.Action("Index","UTOverview")", {builddate:builddate},function(data){
          $.each(data, function() {
                $("#select1").append($("<option />").val(this.Value).text(this.Text));
         });
        }); 
     });

Url.ActionMVCがアクションメソッドへの正しいパスを返すように処理するため、HTMLヘルパーを使用してアクションメソッドへのパスを取得することは常に良い習慣です。使用する数を気にする必要はありません../

上記のコードはテスト済みで、正常に動作します。

于 2012-04-09T12:35:38.023 に答える
0

jquery .post()は、実際にはサーバーへの非同期呼び出しです。それはあなたが何かをする必要があるいくつかのデータを返します。

完全なポストバックを介してページを更新したいだけの場合は、次のことができます。

window.location = "/UTOverview/Index?builddate=" + builddate;

ページを更新せずにドロップダウンの状態を動的に変更する場合は、返されたデータに基づいてドロップダウンボックスを更新する.post()にコールバックを渡す必要があります。この場合、インデックスアクションを呼び出すのではなく、更新されたデータを取得するための特定のアクションを呼び出す必要があります。次のようなもの:

$.post("/UTOverview/BuildSelect?builddate=" + builddate, function(data) {
  $('#buildDropDown').html(data);
});

詳細については、 jQuery.post()を参照してください。または、コントローラーアクションでHTMLを作成するのではなく、これは少しノーノーですが、Jsonの結果を返し、ドロップダウンをこれにバインドします。

どちらの場合も、onchangeイベントのリッスンは、テキストボックスがフォーカスを失ったときにのみ発生することに注意してください。

于 2012-04-09T11:56:35.090 に答える
0

csコードをデバッグし、javascriptコードにアラートを追加してみましたか。

これらを試してみてください。実際の問題に近づく必要があります。また、これらの調査結果を質問に投稿してください。

于 2012-04-09T11:50:21.363 に答える