2016-09-24 6 views
0

Ich versuche, ein neues Fenster zu öffnen mit window.open (actionUrl) die ActionUrl besteht aus der Aktionsadresse und URL als Parameter. so schließlich die actionURL ist: "?/Default/Einzelheiten url = http://www.someaddress.com?a1=1&a2=2&a3=3" jedoch in der Aktion die URL i erhalten ist: "http://www.someaddress.com?a1=1" ich nicht bekommen "& a2 = 2 & a3 = 3" ParameterSenden von URL mit Parameter zu Aktion Funktion über Javascript

Hier

ist der relevante Code anzeigen:

<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> 

und dies ist der Controller und die Aktion

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

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

Antwort

0

Sie müssen die encodeURIComponent Funktion auf den URL-Parameter den Wert verwenden:

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

Der &a2=2&a3=3 Teil tatsächlich Teil der URL /Default/Details war, nicht die http://www.someaddress.com ein. Jetzt, da die innere URL URI-kodiert ist, sollte es funktionieren.

Stellen Sie sicher, um den Wert zu entschlüsseln, wenn obwohl der url Parameter verwenden, decodeURIComponent mit:

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

EDIT

Für den ersten Teil (URI-Codierung) und basiert auf dem Code, sollten Sie Verwenden Sie es so:

<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> 

Wie für den ASP.NET-Teil und die Verwendung von th e string url Parameter, würde ich vorschlagen, den folgenden Beitrag zu überprüfen: using decodeURIComponent within asp.net, da ich nicht mit dieser Umgebung vertraut bin.

+0

Danke, Verwendung von encodeURIComponent das Problem zu lösen. Allerdings habe ich nicht verstanden, wann und warum decodeUriComponent – dan

+0

Ich denke, es hängt von der Situation ab. Wenn Sie einen Parameter codieren, müssen Sie ihn normalerweise dekodieren, wenn Sie ihn verwenden möchten. Andernfalls werden unerwünschte codierte Zeichen ausgegeben. Zum Beispiel ist der codierte URL-Wert "http% 3A% 2F% 2Fwww.someaddress.com% 3Fa1% 3D1% 26a2% 3D2% 26a3% 3D3", was keine gültige URL mehr ist. Sie müssen es entschlüsseln, um eine gültige/verwendbare URL zu erhalten. Aber ich denke, ASP.NET behandelt URI-kodierte Parameter nativ, so dass Sie sich nicht mit dem Dekodierungsteil befassen müssen – Brunt

Verwandte Themen