0

ASP.Net MVC と Google パブリッシャー タグ (GPT) を使用しています。

GPT では、javascript の「スロット」を に作成し<head>、いくつかの html+script を<body>. ここで重要な依存関係は、両方の場所で id が一致する必要があることです。したがって、ヘッドには次のようなものを含む Javascript が含まれます。

<head>
<script>
...
DefineSlot('div-gpt-ad-123456789-0', 'foo', 'bar')
...
</script></head>

<body>
...
<div id='div-gpt-ad-123456789-0'>
  <script> 
  ...
  Display('div-gpt-ad-123456789-0')
  ...
  </script>
</div>
...

これら 2 つのコード間の依存関係を管理するにはどうすればよいでしょうか? 重要な点は、両方のパーツの ID が一致している必要があるということです。

MVC を使用して、これらのコードを動的に作成したいと考えています。したがって、どのビューでも、部分ビューでもレイアウトでも、次のようなヘルパー コールを追加できます。

@Html.CreateAd(size, "foo", "bar")

@Html.CreateAdビュー、部分ビュー、レイアウト、またはネストされたレイアウトのどこでも呼び出すことができます。

どのように ASP.Net MVC を使用して、に入るコードをプログラミングします<head>か?

任意の提案をいただければ幸いです。私は方向性を探しているだけで、本格的な解決策ではありません。

どうもありがとう。

4

1 に答える 1

1

これを行うには、いくつかの方法があります。

ID を ViewData またはベース ビューモデルに追加できます。

次に、ベース コントローラーまたはアクション フィルターを使用して OnActionExecuting または OnActionExecuted を実行すると、好きな場所にデータを追加できます。この例が必要な場合は、この回答にコメントを残してください。

次に、決定した 2 つのソースのいずれかからヘルパー (セクションごとに 1 つ) を読み取ることができます。私は両方のルートに行きました。すべてのページに広告を表示する場合は、基本の ViewModel を使用します。まれに発生する場合は、ViewData の方が適切です。

htmlHelper 拡張メソッド内でビューデータにアクセスするには:

public static class HtmlExtension
{
    public static MvcHtmlString RenderAdHead(this HtmlHelper h)
    {
        h.ViewContext.ViewData.Model // a test and cast here
        h.ViewContext.ViewData["AdIdentifier"] // test for null and cast here

        string tags = String.Empty;
        //build up string to resemble your script/html tags using either of the 
        //sources above, so long as either source is not empty.

        return new HtmlMvcString(tags);
    }
}

フィルタのコード:

public class AdvertisingFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
       List<String> idList = null; // list of string might not be adequate. depends on your implementation
        //read advertising ids from your datastore or wherever you have. 



        filterContext.Controller.ViewData["advertisingFilter"] = idList;
    }
}

basecontroller はほとんど同じですが、代わりに controllercontext を直接持っています。すべてのコントローラーがそれらから継承されていることを確認する必要があります。

于 2013-01-11T03:24:50.620 に答える