0

Telerik MVC 2.0 GridViewを検索したい最初にグリッドがレンダリングされる「インデックス」ビューがあり、「履歴の表示」をクリックすると、PartialView「 SearchGridAjax.ActionLinkが開きます。

このビューには、2つのTelerik MVC DatePickersと送信ボタンがあります。[送信]ボタンをクリックすると、DatePicker値がUploadFilesコントローラーの SearchByDates( DateTime? frmDate,DateTime? toDate)アクションに返されます。

このアクションでは、WorkerServiceクラスとServicesクラスを使用して、DBからUpdateDates、つまり frmDateとtoDateの値の間の更新のレコードをフェッチしています。

この時点まではすべて正常に機能しますが、私の問題はAjaxにあり、UploadFilesViewModelのGetUploadDescriptorがUploadFilesGridにバインドされた後、再びSearchByDatesアクションが呼び出され、JSコードにあるurl.Actionが再度呼び出され、パラメーターは渡されません。最初にこのアクションの呼び出しが行われたとき、FormCollectionには何も含まれていませんが、次に新しい呼び出しが行われたとき、FormCollectionの値にはfrmDate、toDateが含まれています。

最後に、空のグリッドが表示されます。何が間違っているのかわかりません。

ソースコード :-

     My GridView:-
<div id="result">
   <div>
      <%: Ajax.ActionLink ( "Show History", "SearchGrid", null, new AjaxOptions { HttpMethod = "Get",  InsertionMode = InsertionMode.Replace, UpdateTargetId = "renderForm", OnSuccess = "updateTarget" }, new { @class = "t-button" } )%>
    </div>
  <div id="di">
   <% Html.Telerik().Grid<UploadedFilesDescriptor>()
         .Name("UploadedFilesGrid")
       .DataKeys(datakeys => datakeys.Add(m => m.Id))
      .ClientEvents ( events => events.OnDataBound ( "rebindFileListGrid" ) )

        columns.Bound(c => c.UploadedDate)
                .HtmlAttributes(new { @style = "text-align:center;" })
                .Width(100);                   
           })
            .DataBinding(databinding => databinding
                                 .Ajax()
                                 .Select("GetUploadedFilesList",     "UploadFiles"))
                                  .EnableCustomBinding ( true )                
                      .Render();
                     %>
                   </div>
             </div>


 : My SearchGrid PartialView :-

 <% using (Ajax.BeginForm( "SearchByDates","UploadFiles",new AjaxOptions{UpdateTargetId ="divUploadGrid",LoadingElementId = "LoadingImage"},new {@id= "itemForm"}))
{ %>
      //Two Telerik MVC DatePickers named "frmDate" and " toDate"
  <input type="submit" id="ProfileSearchSubmit" name="ProfileSearchSubmit" onclick="aClick();" value="Search" /> 

  <div id="divUploadFileGrid">
   --I am again Rendering the Serached Grid with same model, columns 
  </div> 


    //my Javascript Jquery Ajax Function 
        function aClick() {
         debugger;
          var to = $('#toDate').val().toString();
         var frm = $('#frmDate').val().toString();
         var params = "frmDate=" + frm + "&toDate=" + to;
        if (params != null) {
           $.ajax({
              url: '<%= Url.Action("SearchByDates","UploadFiles") %>'+"?"+params,
              cache: false,               
             success: function (html) {
             $("#divUploadGrid").show();
               },                
             complete: function () {
              $("#LoadingImage").css("display", "none");
             $("#divUploadGrid").css("display", "block");
              $("#result").hide();
                }
              });
           }
            };

    :- Controller Action :-
      public ActionResult SearchByDates( DateTime? frmDate, DateTime?  toDate,FormCollection colletion)
           {
           try
             {
                DateTime? fromDate = frmDate.Value;
                DateTime? toDates = toDate.Value;
               UploadedFilesViewModel model = new UploadedFilesViewModel ( );
               model.GetUploadFileDescriptor = _workerService.GetUploadGridByDates(fromDate, toDates );
               return PartialView ( "SearchGrid", model );                   
            }
          catch (Exception ex)
           {
             throw ex;
           }
         return null;
         }

     :- GridAction to bind records in GridView
              public ActionResult GetUploadedFilesList ( DateTime? frmDate, DateTime? toDate )
            {        
                try
                {
                if (Request.IsAjaxRequest()&& frmDate==null&&toDate==null)
                    {
                    return View ( new GridModel ( _workerService.GetUploadedFilesList ( ) ) );
                    }
                else
                    {
                    return View ( new GridModel ( _workerService.GetUploadGridByDates ( frmDate, toDate ) ) ); 
                    }
                }
                catch (Exception ex)
                {
                    bool reThrow = ExceptionPolicyWrapper.HandleException(ex, ExceptionPolicies.MVCPolicy);
                    if (reThrow)
                        throw;
                }
                return null;
                }
4

2 に答える 2

0

2 つの同時リクエストを受け取ります。

  • Ajax.BeginForm による。

  • 定義された onclick="aClick();" により 送信ボタンの属性(「aClick」関数は、その本体内で別の ajax リクエストをトリガーします)。

送信ボタンから onclick 属性を削除することをお勧めします。ajax フォーム送信の前に JavaScript ルーティングを実行する必要がある場合は、AjaxOptions.OnBegin オプションを定義できます。

new AjaxOptions{ ..., OnBegin="onBegin" }

function onBegin(e){
  ...
}

この関数内で次のことができます。

  • リクエストの本文の値を変更します。
  • false 値を返すことで送信をキャンセルします。

DatePicker コントロールが <% using (Ajax.BeginForm( "SearchByDates","UploadFiles".. を使用して) 内に配置されている場合、これらはすべて変更が必要です。それ以外の場合は、次のように onBegin 関数を定義する必要があります。

function onBegin(e){

var to = $('#toDate').val();
var frm = $('#frmDate').val();

var req = e.get_request();
var req_body = req.get_body();
req_body += "&frmDate=" + frm + "&toDate=" + to;

req.set_body(req_body);

return true;
}

これにより、DatePickers の値も確実に送信されます。

于 2012-08-07T12:36:02.230 に答える
0

送信ボタンに onclick イベント ハンドラーを定義しないでください。Ajax.BeginForm コンストラクトは、DatePicker の値を渡して独自に ajax リクエストを発行します。

于 2012-07-28T19:43:00.317 に答える