簡體   English   中英

從javascript重定向到操作

[英]Redirecting to action from javascript

我有一個MVC4項目,在客戶端我需要重定向到一個特定的操作方法。 我已閱讀以下帖子如何從JavaScript方法重定向到操作? ,還有一個關於使用的評論:

window.location.href = "/{controller}/{action}/{params}";

我已經嘗試過了,但是我的項目安裝在IIS中的位置不起作用。

我的項目已發布到: http://localhost/SomeName.SomeOtherName/

我需要訪問: http://localhost/SomeName.SomeOtherName/Home/Logout

當我使用上一篇文章中推薦的'/ Controller / Action'時,我到達這里: localhost/Home/Logout ,這是不正確的。

我試圖在web.config文件中保留已發布的位置(與上面的發布字符串相同)並構建字符串(連接:發布位置+'/ Home / logout'),但這也不起作用。 以下是我正在使用的stmt。 奇怪的是,這只是將當前頁面的url與我構建的url連接起來。 這不僅無效,而且我還得到其中一個“潛在危險的request.path ...”錯誤。

 window.location.href = "\"" + url + "/Home/logout" + "\"";

如果我使用$(location.hostname)來構建我的字符串,會發生同樣的事情。

有什么想法嗎?

在生成控制器操作的URL時,始終使用url幫助程序。 例如,如果重定向的腳本位於視圖內,則可以執行以下操作:

<script type="text/javascript">
    window.location.href = '@Url.Action("LogOut", "Home")';
</script>

無論您的應用程序是否托管在虛擬目錄中, Url.Action服務器端幫助程序都將確保生成正確的URL。

如果在另一種情況下你的javascript位於一個單獨的js文件(這顯然是最好的做法),你不能使用服務器端助手,那么你有幾種可能性:

  • 使用在視圖中計算並由腳本使用的全局javascript變量:

     <script type="text/javascript"> var logoutUrl = '@Url.Action("LogOut", "Home")'; </script> 

    然后在你的腳本里面的某個地方:

     window.location.href = logoutUrl; 
  • 在某些DOM元素上使用HTML5 data- *屬性,該元素將以某種方式與注銷用戶相關聯。 例如,可能是一些div或按鈕:

     <div id="logout" data-url="@Url.Action("LogOut", "Home")">Log out</div> 

    然后在你的腳本里面:

     $('#logout').click(function() { window.location.href = $(this).data('url'); }); 

    顯然這似乎是一個愚蠢和過於簡單的例子,因為在這種特殊情況下你只需使用Html.ActionLink生成一個LogOut錨,而不必擔心任何javascript或類似的東西,但希望它會為你提供一些示例你真實的場景。

請注意,在所有示例中,如何使用url幫助程序為控制器操作生成正確的URL,並考慮任何可能的虛擬目錄。 這是最重要的規則: 永遠不要在ASP.NET MVC應用程序中硬編碼。

雖然這似乎是隨機的,但這確實涉及上述情況,因為一切都出現在動態彈出窗口中。 有2個按鈕(注銷,繼續)和圖像。 我無法正確顯示圖像,並希望使用幫助程序進行動態鏈接。 我使用以下代碼解決了這個問題:

  var siteRoot = "@(Request.Url.Scheme)://@(Request.Url.Host)@(Url.Content("~"))"; 

有人看到這個有什么不對嗎? 所有其他URL幫助程序示例始終包含控制器和方法,我需要一個有效的完整根值。 思考?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM