2016-04-11 52 views
0

如果請求引用來源的請求源不是itslef,我想將視圖中的所有網址呈現爲絕對網址。將所有內容和動作網址呈現爲絕對網址而不更改視圖頁

所以,如果網站http://www.hostsite.com有拉從http://www.example.com/controller/action內容,那麼下面的ViewPage

@using (Ajax.BeginForm("Save", new AjaxOptions {})) 
{ 
    @Html.ActionLink("More..", "More") 
    <img src="~/Content/img.jpg" /> 
    <input type="submit" value="Save" /> 
} 

應該呈現爲

<form action="http://www.example.com/controller/Save" data-ajax="true" id="form0" method="post"> 
    <a href="http://www.example.com/controller/More">More...</a> 
    <img src="http://www.example.com/Content/img.jpg" /> 
    <input type="submit" value="Save" /> 
</form> 

注意的HTML也應「〜/」 URL中使用一個頁面被絕對修復。

如果可能,我想通過覆蓋一些基本url生成代碼來實現這一點,而不是創建額外的幫助器。

是否有可能重寫MVC的URL輸出功能,而不必改變視圖頁中的單個細節(如使用自定義幫助器)?如果是這樣,我可以使用哪些掛鉤點來覆蓋此輸出行爲?

回答

0

可以創建自定義的ActionLink方法如下

public static HtmlString CustomActionLink(this HtmlHelper htmlHelper 
             ,string linkText,string action,string controller) 
    {   
     return new HtmlString(String.Format("<a href=http://www.example.com/{0}/{1}>{2}</a>", controller, action,linkText)); 
    } 

這將返回你想所需的URL。

用途中查看

@Html.CustomActionLink("DemoLink","Index","Home") 

這將產生所需的輸出

<a href="http://www.example.com/Home/Index">DemoLink</a> 

DemoLink

同樣可以爲的ActionResult的其他重載和圖像,以及創建的helper方法。

+0

我特別不想創建'幫手'方法。我想覆蓋ViewEngine及其相關類如ViewPage的行爲。 –

+0

視圖引擎負責渲染視圖,我們可以覆蓋視圖的路徑,我們可以更改視圖的物理位置,即我們可以將視圖放置在虛擬文件位置,例如數據庫服務器上,甚至可以放在DLL中而不是物理文件存儲器中。但是你試圖實現的行爲不是視圖引擎的責任。控件如何呈現以及爲控件生成的HTML將由helper類進行處理和管理。所以必須重寫相同的。 –

+0

''不是由傭工呈現 –