【问题标题】:Sending url with parameter to action function via javascript通过javascript将带有参数的url发送到动作函数
【发布时间】:2016-09-25 06:12:19
【问题描述】:

我正在尝试使用 window.open(actionUrl) 打开新窗口 actionUrl 由动作地址和 url 作为参数组成。 所以最终 actionUrl 是: “/默认/详细信息?url=http://www.someaddress.com?a1=1&a2=2&a3=3” 但是在操作中,我得到的网址是: “http://www.someaddress.com?a1=1” 我没有得到“&a2=2&a3=3”参数

下面是相关视图代码:

<div>
    <input type="button" value="test" id="btnTest" />
</div>

<script>
    var vurl = '@Url.Action("Details", "Default")';
    $(function () {
        $("#btnTest").click(function () {
            var url = "http://www.someaddress.com?a1=1&a2=2&a3=3";
            vurl = vurl + url;
            window.open(vurl);

        });
    })

</script>

这是控制器和动作

 public class DefaultController : Controller
{
    // GET: Default
    public ActionResult Index()
    {
        return View();
    }

    // GET: Default/Details/5
    public ActionResult Details(string url)
    {
        return View();
    }
}

【问题讨论】:

    标签: javascript asp.net-mvc


    【解决方案1】:

    你需要对url参数的值使用encodeURIComponent函数:

    var actionUrl = '/Default/Details?url=' + encodeURIComponent('http://www.someaddress.com?a1=1&a2=2&a3=3');
    

    &amp;a2=2&amp;a3=3 部分实际上是/Default/Details URL 的一部分,而不是http://www.someaddress.com 的一部分。现在内部 URL 是 URI 编码的,它应该可以工作了。

    确保在使用url 参数时解码值,但使用decodeURIComponent

    var urlMatch = location.search.match(/url=(.*)&?/);
    if (urlMatch) {
        var decodedUrl = decodeURIComponent(urlMatch[1]);
        // do something with the decoded URL...
    }
    

    编辑

    对于第一部分(URI 编码)并根据您的代码,您应该这样使用它:

    <div>
        <input type="button" value="test" id="btnTest" />
    </div>
    
    <script>
        var vurl = '@Url.Action("Details", "Default")';
        $(function () {
            $("#btnTest").click(function () {
                var url = "http://www.someaddress.com?a1=1&a2=2&a3=3";
                vurl = vurl + encodeURIComponent(url);
                window.open(vurl);
    
            });
        })
    
    </script>
    

    关于 ASP.NET 部分和string url 参数的使用,我建议查看以下帖子:using decodeURIComponent within asp.net,因为我不熟悉这个环境。

    【讨论】:

    • 谢谢,使用 encodeURIComponent 解决了这个问题。但是,我不明白何时以及为什么要使用 decodeUriComponent
    • 我想这取决于情况。通常当你对一个参数进行编码时,你需要在你想使用它的时候对其进行解码,否则你最终会得到不需要的编码字符。例如,编码的url 值是http%3A%2F%2Fwww.someaddress.com%3Fa1%3D1%26a2%3D2%26a3%3D3,它不再是有效的 URL。您必须对其进行解码才能获得有效/可用的 URL。但我猜 ASP.NET 本身会处理 URI 编码参数,因此您不必费心解码部分
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2019-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多