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

在不知道要重新渲染的原始视图是什么的情况下,我想说您的问题很可能是您应该将其作为 PartialView 返回,因为您正在发出 Ajax 请求。此外,看起来您实际上并没有在任何地方渲染结果。你的提琴手反应是什么?它是否显示返回的 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 回答