0

同じコントローラの別のビューを返す方法は? アプリケーションのデバッグを行いました。ajax メソッドはコントローラー アクションを呼び出し、パラメーターを渡し、命令を実行します。で

return View("GetEmployeeDays", model);,

" GetEmployeeDays" ビューはモデルから値を受け取り、データが取り込まれますが、最終的にブラウザで (リクエストを行ったものから) ビューではなく、最初のビューを受け取りGetEmployeeDaysます。

Global.asax からのルーティング コード:

public static void RegisterRoutes(RouteCollection routes)
 {
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
       new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );          
  }

アクション コントローラーを呼び出してパラメーターを渡す JQuery コード:

<script type="text/javascript">
  $(document).ready(function () {
  $('li').click(function () {
  $.ajax({
    url: '@Url.Action("GetEmployeeDays", "ApproveWork")',
    type: 'GET',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: { userCode: $(this).attr('id') }
   })
  });
});

ビューをレンダリングするコントローラー アクションGetEmployeeDays:

   [HttpGet]
   public ActionResult GetEmployeeDays(string userCode)
   {
      .....
    return View("GetEmployeeDays", model);
   }
4

4 に答える 4

1

ajax リクエスト経由でリダイレクトすることはできません。簡単な GET リクエストを試してください。

<script type="text/javascript">
$('li').on('click', function()
{
   document.location.href = '@Url.Action("GetEmployeeDays", "ApproveWork")' + '?param1=val1&param2=val2';
});
</script>

コントローラーは今のままで大丈夫です。

編集済み:要求に応じて更新

于 2013-01-18T15:24:12.887 に答える
1

再レンダリングされている元のビューが何であるかを知らなくても、Ajax リクエストを行っているため、これを PartialView として返す必要がある可能性が最も高いと思います。さらに、実際に結果をレンダリングしているようには見えません。あなたのフィドラーの反応は何ですか?返された HTML は表示されますか? 含まれている場合は、おそらく $.ajax 内の .done コールバックを使用してページにダンプする必要があります。

<script type="text/javascript">
$(document).ready(function () {
$('li').click(function () {
$.ajax({
    url: '@Url.Action("GetEmployeeDays", "ApproveWork")',
    type: 'GET',
    dataType: 'json',
    contentType: 'application/json; charset=utf-8',
    data: { userCode: $(this).attr('id') }
    }).done(function() {
       $(this).addClass("done");
  });
});
</script>
于 2013-01-18T15:24:17.627 に答える
1

新しいページをリロードせずに、単にページの一部に何かをロードしたい場合は、ajax 関数のコールバックでページの特定の部分を更新する必要があります。

$(function(){
 $('li').click(function () {
     var uCode=$(this).attr("id");
     $.get("@Url.Action("GetEmployeeDays","ApproveWork")?userCode="+uCode,
                                                          function(response){
       $("#DivToBeUpdated").html(response);
     });
 });
});

location.href新しいビューにリダイレクトする場合は、プロパティ値を更新して行う必要があります。

$(function(){
 $('li').click(function () {
     var uCode=$(this).attr("id");
     var url="@Url.Action("GetEmployeeDays","ApproveWork")?userCode="+uCode;
     window.location.href=url;         
     });
 });
});
于 2013-01-18T15:45:22.770 に答える
0

?@David Diez からビルドすると、次のようにパラメーターをリクエストに追加できます。

<script type="text/javascript">
$('li').on('click', function()
{
   document.location.href = '@Url.Action("GetEmployeeDays", "ApproveWork", new { caseSensativeParamName = "foo" })';
});
</script>

もちろん、JavaScript ルートを使用することもできます。このようなものが動作するはずです:

<script type="text/javascript">
$('li').on('click', function()
{
   var targetUrl = '@Url.Action("GetEmployeeDays", "ApproveWork")';
   var yourParam = $("#input-id").val();
   targetUrl = targetUrl + '?yourServerParamName=' + yourParam;
   document.location.href = targetUrl;
});
</script>

乾杯。

于 2013-01-18T15:39:26.290 に答える