日付ピッカー コントロールを含むビューと、ページ上のいくつかの部分ビューがあります。日付は、コントローラーの ViewData でデフォルトで今日の日付に設定され、ページの読み込み時に表示するために使用されます。ユーザーが日付ピッカーで日付を変更した場合、選択した値を Jquery 変数からコントローラーの ViewData に渡し、すべての部分ビューを更新するにはどうすればよいですか?
2 に答える
@トニー、返信ありがとうございます。jquery変数をviewdataに渡したいという間違った方法で入れました。つまり、jquery変数(datepickerで選択された値)に基づいているため、部分ビューをリロードする必要があります。私はAjaxでそれをしなければなりません.これは私がJavascriptで従った手順です:
$(function () {
$('#datePickerID').datepicker({
onSelect: function (dateText, inst) {
$.post('<%=Url.Action("GetControllerActionResult","ControllerName") %>',
{ parameter1: dateText },
function (rawdata) {
var data = $.parseJSON(rawdata);
$('htmlID or className of your partial view').html(data.dataString); //rendering your partial view
}
);
}
});;
コントローラーで:
public ActionResult GetControllerActionResult(dataType parameter1) {
ViewData["someValue"] = parameter1;
ViewData["yourPartialViewObject"] = perform some action...
var data = new Dictionary<string, object>();
data.Add("dataString", this.RenderViewToString("partialViewName", ViewData["yourPartialViewObject"]));
return Content(GetJSONString(data));
}
日付ピッカー コントロールは、ユーザーが日付を選択するのに役立つ JavaScript が関連付けられた単なる HTML 要素です。これは完全にクライアント側であるため、ブラウザ (IE、Firefox、Chrome など) 上で実行されます。ViewData は、サーバー側のコード (C# など) によってコントローラー アクションに入力できる一時的なストアであり、クライアント ブラウザーに送信される HTML 応答を生成するためにビュー内で使用されます。したがって、jQuery 変数を ViewData に渡すことはできません。意味がありません。
パーシャルによって生成されたページの部分を更新する場合は、いくつかのオプションがあります。
(a) コントローラー アクションに日時を渡すポストバックを実行し、ページ全体を更新します (非常に単純ですが、実行しようとしている内容によっては、ユーザー エクスペリエンスが向上しない場合があります)。
(b) Ajax を使用して、必要なページのセクションを更新します (より複雑になりますが、より良いユーザー エクスペリエンスを提供できます)。