私はこれまでにJavaScriptを初めて使っています。したがって、問題はより大きなアプリケーションにあります。コントローラは、特定のJavaScript関数が特定のViewModelプロパティに依存するビューに情報リストを渡しています。私はうまくいけば私が得ているものを説明するために簡単なアプリケーションを書いた。以下はJavaScriptを使用してボタンのクリックに関する現在の情報を更新または取得する
は、インデックスページにリストを渡していたサンプルコントローラです:
public ActionResult Index() {
List<int> activeIds = new List<int>();
SqlConnection sqlConn = new SqlConnection(connection_String);
sqlConn.Open();
string sqlStr = "SELECT * FROM dbo.[JS-Test] WHERE Active = 1";
SqlCommand sqlCmd = new SqlCommand(sqlStr, sqlConn);
SqlDataReader sqlDR = sqlCmd.ExecuteReader();
if(sqlDR.HasRows) {
while (sqlDR.Read()) {
activeIds.Add((int)sqlDR["ID"]);
}
}
sqlDR.Close();
sqlCmd.Dispose();
sqlConn.Close();
return View(activeIds);
}
これは、データベース内の現在の「アクティブ」の項目を返します。
ボタンをクリックすると、データベースから現在アクティブな項目数が取得されています。ユーザーが数分間読み込まれた後、ページ上でアイドル状態を維持しているとします。彼らのページが最初にロードされたとき、モデルはアクティブとしてリストされた5つのアイテムを返しました...しかし、彼らが待っていた間に、データベース内の3つの追加のアイテムが合計で8にアクティブに切り替えられました。現在の8個の代わりに5個のアイテムを提出します。
"/ Home/PostResults" ActionResultでアクティブなアイテムの現在の数を取得するクエリを実行することができません。セットアップ。関数の残りの部分がリフレッシュされたモデルの値を使用する前に、ページをリフレッシュする方法(更新されたモデルを取得する方法)はありますか?
ご不明な点がございましたら、お知らせください。私は喜んで遵守します。私は他の質問や答えを見てきましたが、私の状況ではうまく動作しないものは見つかりませんでした。ありがとう!
編集#1
だから、私はちょうどJSONとしてリスト数を返すホームコントローラにこの機能を追加しました。
public ActionResult GetIds(){
List<int> activeIds = new List<int>();
SqlConnection sqlConn = new SqlConnection(connection_String);
sqlConn.Open();
string sqlStr = "SELECT * FROM dbo.[JS-Test] WHERE Active = 1";
SqlCommand sqlCmd = new SqlCommand(sqlStr, sqlConn);
SqlDataReader sqlDR = sqlCmd.ExecuteReader();
if (sqlDR.HasRows) {
while (sqlDR.Read()) {
activeIds.Add((int)sqlDR["ID"]);
}
}
sqlDR.Close();
sqlCmd.Dispose();
sqlConn.Close();
return Json(activeIds.Count());
}
ビュースクリプトは次のようになります...
<script>
$(document).ready(function() {
$('#printBtn').click(function() {
var numberOfActiveIds = @Model.Count();
$.ajax({
type: "GET",
url: "/Home/GetIds",
success: function(response) {
numberOfActiveIds = response;
$.ajax({
type: "POST",
url: "/Home/PostResults",
data: { ids: numberOfActiveIds},
success: function (results) {
if(results == "Success") {
window.location.href = '/Home/Results';
}
}
});
}
});
});
});
</script>
私は現在、次のエラーを取得しています
...
がリソースをロードに失敗しました:サーバーが応答してステータス500(内部サーバーエラー)
編集#2
JsonRequestBehaviorをAllowGetに設定して正常に動作させる必要がありました。もう一度、ありがとう!私はあなたのアイデアを与えることができ
「ページを更新する方法はありますか?」確かにそれはあなたがしたいことをしません。ページを更新すると、POSTはキャンセルされます。 ajax呼び出しで現在の "actives"を得ることができるように、あなたのコントローラにメソッドを公開できませんか? – gforce301
@ gforce301私はそれを試しましたが、私はそれを正しく設定しているとは思わないし、それが良い練習か可能かどうかは分かりませんでした。もしそうなら、それは最善のルートだと私は思う。私はそれをもう一度設定し、構文やフローのエラーが明白であるかどうかを確認するために書いたものを投稿しようとすることができますか?レスポンスありがとう! – gonzzz
なぜAJAXを使用しますか? AJAXは**非同期**リクエストに使用されますが、 'success'イベントハンドラでは** synchronous **を使用して別のページにリダイレクトします。 – Alexander