通过javascript将参数发送到动作功能的url

时间:2016-09-24 21:45:43

标签: javascript asp.net-mvc

我正在尝试使用window.open(actionUrl)打开新窗口 actionUrl由action地址和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();
    }
}

1 个答案:

答案 0 :(得分:0)

您需要在url参数的值上使用encodeURIComponent函数:

(2, u'22')
(3, u'25')
(4, u'443')
(5, u'443')
(6, u'443')
(7, u'22')
(8, u'80')
(9, u'443')
(10, u'80')
(10, u'443')
(11, u'80')
(11, u'443')
(12, u'80')
(12, u'443')
(13, u'443')
(14, u'80')
(14, u'443')
(15, u'25')

var actionUrl = '/Default/Details?url=' + encodeURIComponent('http://www.someaddress.com?a1=1&a2=2&a3=3'); 部分实际上是&a2=2&a3=3网址的一部分,而不是/Default/Details网址的一部分。既然内部URL是URI编码的,它应该可以工作。

请确保在使用http://www.someaddress.com参数时使用url解码该值:

decodeURIComponent

修改

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

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

至于ASP.NET部分和<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> 参数的使用,我建议检查以下帖子:using decodeURIComponent within asp.net因为我不熟悉这个环境。