2017-01-23 66 views
1

我有一个MVC应用程序。在一个页面上,我有一个显示引导表的局部视图。我有一些javascript代码,当表格行被双击时触发。此代码从双击行中检索一些值并构造一个url,然后导航到该URL。传递参数而不使用QueryString

这工作正常,但我创建的网址的方式意味着我有数据可见作为网址中的querystrings。如何在不使用querystrings的情况下实现导航。哦,我需要导航到一个新的窗口/选项卡,如果可能的话。

我对双击JavaScript代码:

$mTable.on('dbl-click-row.bs.table', function (e, row, $element) { 

     var cod = $('#hdCOD').val(); 
     var mv = mGetSelectedRow().CMonth; 
     var yv = mGetSelectedRow().CYear; 

     var diff_cv = moment.utc(cod).diff(moment.utc(yv + '-' + pad(mv, 2) + '-' + '24'), 'months', true); 
     var plcf = ''; 

     switch(true) { 
      case (diff_cv >= 2): 
       plcf = 'past'; 
       break; 
      case (diff_cv >= 1 && diff_cv < 2): 
       plcf = 'last';    
       break; 
      case (diff_cv >= 0 && diff_cv < 1): 
       plcf = 'current'; 
       break; 
      case (diff_cv < 0): 
       plcf = 'future'; 
     } 

     var url = 'ClaimMonth/ViewMonth?pn=' + mGetSelectedRow().Cpid + '&cm=' + mv + '&cy=' + yv + '&mt=' + plcf + '&cod=' + cod; 
     window.open(url, '_blank'); 
    }) 

局部视图是使用剃刀语法叫:

Html.RenderAction("GetSummaryForAdmin", New With {Key .pn = Model.PersonelNo}) 

我似乎无法找到在JavaScript中模仿等效功能New With {Key .pn = Model.PersonelNo}我也不确定这是否是这样做的。我已经考虑过Ajax调用,但我不认为我可以将它作为新窗口/选项卡打开。

任何帮助表示赞赏。

UPDATE

我发现使用网络选项卡中,我可以看到通话,给我我想要的文件......在开发工具(在Chrome/IE F12)以下ajax.post方法对于文档,如果我预览它,它会显示数据。但该页面不显示在浏览器中。

在新窗口/标签中打开并不是必需条件,但会很高兴。

我的新代码替换...

 //var url = 'ClaimMonth/ViewMonth?pn=' + mGetSelectedRow().Cpid + '&cm=' + mv + '&cy=' + yv + '&mt=' + plcf + '&cod=' + cod; 
     //window.open(url, '_blank'); 

与...

 $.ajax({ 
      type : "post", 
      url : "ClaimMonth/ViewMonth",    
      data : {pn: mGetSelectedRow().Cpid, cm: mv, cy: yv, mt: plcf, cod: cod },    
      success : function(response) { 
       window.open(); 
      }, 
      error : function(xhr) { 
       console.log("error"+xhr.status); 
      }, 
      complete : function() { 
      } 
     }); 

,我改变了我的控制器功能,接受参数,而不是阅读的Request.QueryString

+0

,那么几乎你必须使用查询字符串。在页面之间移动并传输数据的唯一方式是使用POST提交表单提交。然后我不确定您可以在单独的选项卡中打开结果。但是,当然,即使这样,一个好奇的用户也可以通过观看网络(通过浏览器工具或任何其他适当的软件)轻松查看POST中传递的参数。你为什么要隐藏这些数据?它看起来像你试图隐藏的所有值都可以在任何地方的页面上找到 – ADyson

+0

@ADyson correct ..这些值不敏感......但客户更喜欢干净的网址。我遇到了一些使用Post的代码,但没有显示结果。查看我的更新 – Mych

+0

'window.open();'只是打开一个没有内容的空白窗口。有趣的观察你的客户,我从来没有遇到任何用户甚至注意到他们的URL栏中有什么(在某些情况下,他们没有注意到不知道他们是否在测试系统或者住一个),不要介意看它是否看起来整洁。 – ADyson

回答

1

你会的必须使用回传和Session的组合。

  • AJAX Post(因为您已经)将值发送回服务器。

  • 在它处理的是回传的MVC操作方法,该值保存到会话:

    Public Function ViewMonth(...) As JsonResult 
        Session("SavedMonth") = New MonthObj(pn, cm, cy, mt, cod) 
    
        Return Json(True) 
    End Function 
    
  • 当AJAX后成功返回,打开一个新窗口使用不同的URL:

    success : function(response) { 
         window.open('/ClaimMonth/AfterSave'); 
        }, 
    
  • 该URL的MVC操作方法从会话中加载保存的数据,然后显示它。

    Public Function AfterSave() As ViewResult 
        Dim model As MonthObj = TryCast(Session("SavedMonth"), ModelObj) 
    
        Return View(model) 
    End Function 
    
如果你想与参数导航
+0

谢谢buffjape ...这个工程。我不认为有一种方法可以在新窗口中打开/选项卡在那里?如果没有人对改进此解决方案有任何建议,我将在一天结束时标记为答案,以便在新窗口/选项卡中打开该页面。 – Mych