2017-07-08 46 views
0

我有一些幫助方法來建立Html輸出,但它只在我的本地開發出來,而不是我的登臺服務器。 〜不起作用,因爲這不是剃刀。MVC5如何在代碼中找到根路徑?

我的本地站點的路徑是http://localhost/testSite
我的臨時路徑是http://192.168.1.2/

在我的本地這就產生 SRC = 「/測試網站/ images.test.jpg」
在我的分期例如它產生SRC =「// images.test.jpg」

var baseUrl = HttpRuntime.AppDomainAppPath; 
var tb = new TagBuilder("img"); 
tb.MergeAttribute("title", "Main Image"); 
tb.MergeAttribute("src", baseUrl +"\images\test.jpg"); 
return new MvcHtmlString(tb.ToString(TagRenderMode.SelfClosing)); 

我敢肯定有內置的方法來做到這一點在C賦側

回答

1

啊...查看所有的助手和上下文對象可用之後,我必須得出結論,沒有功能或提供正是你想要什麼方法(除了使用波浪中的一個功能,如其他答案所示)。它們都需要某種字符串處理(例如,Split()TrimEnd())才能工作。

相反,微軟好心給了我們一個創可貼功能,AppendTrailingSlash,你可以用它來解決這樣的問題:

var baseUrl = VirtualPathUtility.AppendTrailingSlash(HttpRuntime.AppDomainAppPath); 
var tb = new TagBuilder("img"); 
tb.MergeAttribute("title", "Main Image"); 
tb.MergeAttribute("src", baseUrl +"images/test.jpg"); //notice I removed the initial slash 
return new MvcHtmlString(tb.ToString(TagRenderMode.SelfClosing)); 

AppendTrailingSlash保證不會在當正斜槓「雙補」虛擬目錄是「/」,所以這應該適用於分段和開發環境。

P.S.我很肯定你應該使用AppDomainAppVirtualPath而不是AppDomainAppPath,它提供物理路徑而不是虛擬路徑。

+0

這似乎是返回磁盤上的絕對路徑而不是該網站的基址url – user3953989

+1

是的,我只是複製OP的代碼。它可能應該是'AppDomainAppVirtualPath'而不是'AppDomainAppPath'。我會添加一個註釋。 –

1

變種的baseUrl = System.Web.Mvc.UrlHelper.GenerateContentUrl( 「〜/圖像/」, HttpContext.Current);

使用GenerateContentUrl您可以繼續使用〜/