2010-12-28 5 views
2

jQueryでアクションメソッドを呼び出そうとしていて、ここにパラメータを渡すのに役立ちました:Calling action method in MVC with jQuery and parameters not working。しかし、パラメータが正しく送信されても​​、アクションメソッドでは、別のアクションメソッドにリダイレクトする必要があります(同じパラメータを渡す)。デバッガでは、リダイレクトが実行されていることがわかりますが、パラメータはそのままですが、返されたビューはそれに応じて更新されません。jQueryによって呼び出されたときにRedirectToActionが機能しないのですか?

jQueryを使用してリダイレクトするアクションメソッド?

のjQueryによって呼び出されるアクションメソッド:

public ActionResult SelectDate(string date) 
    { 
     DateTime dateObject = DateTime.Parse(date); 
     MyCalendar calendar = new MyCalendar(); 

     string number = calendar.GetWeekNumber(dateObject).ToString(); 
     string year = dateObject.Year.ToString(); 
     return RedirectToAction("Edit", new { number = number, year = year }); 
    } 

アクションにリダイレクト方法:

public ActionResult Edit(string number, string year) //Why string here??? 
    { 
     int n; 
     if (string.IsNullOrEmpty(number)) 
      n = myCalendar.GetWeekNumber(DateTime.Today); 
     else 
      n = Int32.Parse(number); 

     int y; 
     if (string.IsNullOrEmpty(year)) 
      y = DateTime.Today.Year; 
     else 
      y = Int32.Parse(year); 

     List<Customer> customers = _repository.Customers; 
     ViewData["Customers"] = new SelectList(customers, "CustomerId", "CustomerName"); 

     ViewData["WeekNumber"] = n; 
     ViewData["Year"] = y; 

     return View(); 
    } 

またはjQueryの(取得され)ない新しいページをロードするためにアクションメソッドを呼び出すための適切な方法はありますか? ActionLinkを使って同じことをするのはうまくいくことに注意してください。私はdatepickerプラグインを使用しているので、jQueryで呼び出す必要があります。また、アクションを呼び出す方法としてボタンもあります。

私は間違っていますか?

UPDATE:jQueryのは、今直接最終アクションメソッドを呼び出すように

実は、RedirectToActionが問題ではないようで、私が直接最初のアクションメソッドの仕事をしていることにより、(コードを修正jQuery、つまり日付を週と年に変換します)。しかし、私はまだ新しい週と新しい年の新しいページを取得しません。ここで

は新しいjQueryの:もう一度

function selectWeek() { 
     $('#selectWeekButton').click(function (event) { 
      var date = $('#selectWeekId').val(); 
      var selectedDate = new Date(date); 
      var year = selectedDate.getFullYear(); 
      var week = selectedDate.getWeekOfYear(); 
      var url = '<%: Url.Action("Edit") %>'; 
      $.get(url, { number: week, year: year }, function (data) { 
       //     alert('Test'); 
      }); 
     }); 
    } 

、それは間違っているのgetを使用していますか?私はhtmlタグにコンテンツをロードしたくないので、jQueryを使用してアクションリンクと同じものを実行したい、つまりアクションメソッドを呼び出して編集ビューを呼び出す...

たとえば、このアクションリンク

答えて

3

jqueryの... jQueryので

<a href="<%=Url.Action("Next", new { number=ViewData["WeekNumber"], year = ViewData["Year"] })%>"> 
      &gt;&gt;</a> 

しかし、私は(直接または編集)それをやりたい:編集するためにリダイレクトし、新たな週と年のビューを示して次と呼ばれるアクションメソッドを呼び出すと、正常に動作しますAJAXは自動的にリダイレクトを実行し、成功コールバックでリダイレクトした Editアクションの結果を取得します。このコールバックでは、コントローラアクションによって返される部分的なHTMLを取得します。あなたの場合はAJAXを使用していない、

$('#someresultDiv').load('<%= Url.Action("SelectDate") %>', { date: '123' }); 
+0

@Andersスヴェンソン:

$.ajax({ url: '<%= Url.Action("SelectDate") %>', data: { date: '123' }, success: function(result) { $('#someresultDiv').html(result); } }); 

を、または単に.load()メソッドを使用します。あなたはDOMの一部を更新したいのであれば、あなたは明示的にそれを指示する必要がありますリダイレクトされます。あなたはAJAXの全体のポイントを逃しています。 AJAXは、ページ全体をリダイレクト/リロードせずにページの一部のみを更新する必要がある場合に使用します。 AJAXを使用しないでリダイレクトする必要がある場合は、単純なアンカーリンクを設定します。 –

+0

@ダーリン:そうですね、何か間違っていると思われますが、私はどのようにしてアクションリンクと同じことをやっていますか、同時に必要なパラメータを渡します(そして入力フィールドセットdatepicker jQueryプラグインによる)?他のjQueryが、アクション・メソッドと同じアクション・メソッドを呼びますか?それはget()またはajaxではありませんか? – Anders

+0

@アンダースヴェンソン、必要がない場合はAJAXを使用しないでください:単純なActionLinkを使用してください。 –

関連する問題