2016-04-11 8 views
0

リクエストリファラーがリクエスト自体と異なる起源を持つ場合、ビュー内のすべてのURLを絶対URLとしてレンダリングします。だから、ビューアページを変更せずにすべてのコンテンツとアクションのURLを絶対URLとしてレンダリングします。

サイトhttp://www.hostsite.comは、次のビューページ

@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の使用もすべき注意をレンダリングする必要がありhttp://www.example.com/controller/actionからコンテンツをプルページを持っている場合絶対に修正する。

可能な限り、余分なヘルパーを作成する代わりに、ベースURL生成コードをオーバーライドすることでこれを実現したいと考えています。

mvcのURL出力機能をオーバーライドすることはできますが、カスタムヘルパーのように、ビューページ自体の1つの詳細を変更する必要はありませんか?もしそうなら、私はこの出力動作をオーバーライドするために使用できるフックポイントはどこですか?

答えて

0

は、あなたがしたい目的のURLを返します

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)); 
    } 

これ以下のようにカスタムActionLinkのメソッドを作成することができます。

が表示

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

を使用しますこれは、同様にあなたにものActionResultの他の過負荷のためおよび画像のためのヘルパーメソッドを作成することができます

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

DemoLink

所望の出力を生成します。

+0

特に「ヘルパー」メソッドを作成したくありません。私は、ViewEngineとそれに関連するViewPageのようなクラスの振る舞いをオーバーライドしたいと思います。 –

+0

ビューエンジンはビューのレンダリングを担当し、ビューのパスをオーバーライドできます。ビューの物理的な位置を変更することができます。つまり、仮想ファイルの場所、たとえば物理的なファイルストレージではなくDLL 。しかし、あなたが達成しようとしている動作は、ビューエンジンの責任ではないものです。コントロールのレンダリング方法と、コントロール用に生成されるHTMLは、ヘルパークラスによって処理され、管理されます。したがって、同じものを無効にする必要があります。 –

+0

」はヘルパーによってレンダリングされません –

関連する問題