0

入力があります

<input type="button" id="test" value="test" />

「ホーム」コントローラーでの私のアクション:

public ActionResult DataUsage(DateTime startDate, DateTime endDate, string userName)
{
  var data = FetchDataFromDB(startDate, endDate, uName);
  return PartialView("DataUsageChartViewPartial", data);
}

DataUsageから結果フォームをロードしたいdiv

<div id="myChart"></div>

jQueryコード

$(function() {
    $("#test").click(function () {
        $.ajax({
               url: '/Home/DataUsage',
               type: 'POST',
               data: { startDate: $('#startDate').val(), endDate: $('#endDate').val(), userName: $('#userName').val() },
               success: function (result) {
                   alert("success " +result);
              },
              error: function (err) {
                 alert("error "+err);
             }
            });
            return false;
        });
    }
 );

ボタンをクリックすると、コントローラーのアクションの結果がdiv(myChart)に入力されます。エラーが発生し続け、コントローラー/アクションのブレークポイントに到達しないため、jQueryが正しいかどうかわかりません。誰かが私が間違っていることとそれを修正する方法を教えてもらえますか

4

3 に答える 3

1

スターターのコードの問題は、Ajaxがコントローラーを呼び出すようにPostメソッドを指定したことですが、コードに従って、メソッドがgetメソッドで使用可能であることを示しています。最も簡単な方法は[HttpPost]、コントローラーのアクションメソッドにアノテーションを付けることです。

つまり、コントローラーのメソッドは次のようになります。

[HttpPost]
public ActionResult DataUsage(DateTime startDate, DateTime endDate, string userName)
{
  var data = FetchDataFromDB(startDate, endDate, uName);
  return PartialView("DataUsageChartViewPartial", data);
}

したがって、これにより、ブレークポイントが呼び出されないという問題が解決されます。

他に提案されているのは、ajaxまたはどこからでも呼び出されるURLを指定する場合は、常にユーザーUrl.Action(...)メソッドです。そうしないと、展開時に問題が発生する可能性があります。

于 2012-07-09T10:09:07.517 に答える
1

テキストボックスに入力した日付の形式が正しく、サーバー側のカルチャ設定と一致していることを確認してください。たとえば、アプリケーションが構成されているカルチャに応じて、2012年12月15日と2012年12月15日は、ユーザーの出身地に応じて同じ日付をユーザーに示す場合がありますが、デフォルトのモデルバインダーは現在のカルチャ設定を使用します。

また、この種の問題をデバッグするには、FireBugなどのJavaScriptデバッグツールを使用して、AJAXリクエストを調べてください。これを行った場合、サーバーから送信された正確なエラーメッセージが表示されます。この場合、次の行は15/12/2012有効なDateTimeではありません

于 2012-07-09T10:00:50.760 に答える
0

モーリス、

正しいURLが呼び出されていないという非常に単純なケースであると思います。mvc でヘルパーを使用してみてください。

url: '@Url.Action("DataUsage", "Home")'

また、アクションを HttpPost でデコレートして、ajax タイプと歩調を合わせることを確認することもできます。つまり、次のようになります。

[HttpPost]
public ActionResult DataUsage(...)

問題を完全に解決しない場合でも、これで一歩近づくはずです。

最後のステップは、「呼び出し元」ビュー内に「myChart」という div があることを確認し、次のように入力することです。

<div id='myChart'></div>

success: function (result) {
    $('#myChart').html(result);
}

お役に立てれば

于 2012-07-09T09:55:36.550 に答える