【问题标题】:MVC Redirect to View from jQuery with parametersMVC 重定向到带有参数的 jQuery 视图
【发布时间】:2013-12-28 21:18:45
【问题描述】:

我已经看过一些与此相关的帖子,但似乎无法让它发挥作用。通过重定向,我得到一个“找不到资源错误”。

我正在尝试重定向到详细信息页面。元素中有一个 ID,我将其存储为 NestId,我希望最终能够将其传递给视图。现在我只想重定向到详细信息页面,没有模型或任何附加的东西。我只是想让 NestId 在那里,这样我就可以用它来进行更多的 AJAX 调用。

这是我的 jQuery:

$('#results').on('click', '.item', function () {
            var NestId = $(this).data('id');
            var url = '@Url.Action("Details, Artists")'; 
            window.location.href = url; 
        })

这是控制器上的功能:

public ActionResult Details(string NestId)
    {
        ViewBag.NestId = NestId; 
        return View();
    }

我不确定我是否以正确的方式进行此操作,但我们将不胜感激,我已经停滞了一段时间。谢谢!

【问题讨论】:

    标签: javascript jquery asp.net-mvc url-redirection


    【解决方案1】:

    我以前也是这样的

    内部视图

    <script type="text/javascript">
    
    //will replace the '_transactionIds_' and '_payeeId_' 
    var _addInvoiceUrl = '@(Html.Raw( Url.Action("PayableInvoiceMainEditor", "Payables", new { warehouseTransactionIds ="_transactionIds_",payeeId = "_payeeId_", payeeType="Vendor" })))';
    

    javascript 文件上

    var url = _addInvoiceUrl.replace('_transactionIds_', warehouseTransactionIds).replace('_payeeId_', payeeId);
            window.location.href = url;
    

    通过这种方式,我可以按需传递参数值..

    通过使用@Html.Raw,url不会得到amp;的参数

    【讨论】:

    • 我喜欢这个解决方案,很干净! :)
    【解决方案2】:

    我相信这也行得通:

    $('#results').on('click', '.item', function () {
                var NestId = $(this).data('id');
                var url = '@Html.Raw(Url.Action("Artists", new { NestId = @NestId }))';
                window.location.href = url; 
            })
    

    【讨论】:

      【解决方案3】:

      使用查询字符串重定向

       $('#results').on('click', '.item', function () {
                          var NestId = $(this).data('id');
                         // var url = '@Url.Action("Details", "Artists",new { NestId = '+NestId+'  })'; 
                          var url = '@ Url.Content("~/Artists/Details?NestId =' + NestId + '")'
                          window.location.href = url; 
                      })
      

      【讨论】:

      • 我在 NestId 周围收到一个错误,说 url 上的字符文字中的字符太多...
      • 你可以试试这个,var url = '@ Url.Content("~/Artists/Details?NestId =' + NestId + '")'
      【解决方案4】:

      如果您的点击处理程序被成功调用,那么这应该可以工作:

      $('#results').on('click', '.item', function () {
                  var NestId = $(this).data('id');
                  var url = "/Artists/Details?NestId=" + NestId; 
                  window.location.href = url; 
              })
      

      编辑:在这种特殊情况下,鉴于 action 方法参数是一个 可为空 的字符串,那么如果 NestId == null,则根本不会导致任何异常,因为 ModelBinder 不会不要抱怨它。

      【讨论】:

      • 这似乎完成了工作。有没有办法像这样对网址进行硬编码?
      • 您可以将其替换为:@Url.Action("Details", "Artists",new { NestId = '+NestId+' })' 正如@ABs 所建议的那样。另外,考虑接受对您有帮助的答案以帮助他人。
      • 是的,我在等着看是否有没有硬编码的解决方案。当我尝试您和 ABs 说的选项时,我收到一个错误(我在下面评论了他的)。
      猜你喜欢
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      相关资源
      最近更新 更多