1

サーバー上に非常に単純なスクリプトを作成したい (サーバー側イベントのクライアント プロキシ)。MVC4 を使用してサーバー側でスクリプトをレンダリングする最も一般的な方法は何ですか?

最初の回答の後に更新: たとえば@Scripts.Render("~/eventAggregation/events")、C# コードを使用して Javascript を生成するサーバー上のコードを呼び出す必要があります。また、これは lib 用であるため、Razor ページまたは MvcController では実行できません。 SignalR の Hub プロキシの近くにいて、そのコードを見ましたが、動的に生成されたスクリプトを挿入するための数百行のコードは、それよりも簡単に違いないでしょうか?

4

2 に答える 2

1

MvcController または Razor ビューを使用できないと述べたので、金属に近づくことができます: IHttpHandler

だから、1つ書くことから始めます:

public class MyHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var response = context.Response;
        response.ContentType = "text/javascript";
        var message = "This is some super dynamic message. The UTC time now is: " + DateTime.UtcNow.ToLongTimeString();
        var js = string.Format("alert({0});", new JavaScriptSerializer().Serialize(message));
        response.Write(js);
    }

    public bool IsReusable 
    { 
        get { return true; } 
    }
}

次に、対応するルート ハンドラを記述します。

public class MyHandlerProvider: IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MyHandler();
    }
}

そしてApplication_Start、ルートを追加します:

protected void Application_Start()
{
    RouteTable.Routes.Add(
        new Route(
            "eventAggregation/events", 
            new MyHandlerProvider()
        )
    );
}

また、ルートを手動で追加したくない場合は、Application_Startを使用できますWebActivator。単純に静的 Startup クラスを記述します。

internal static class Startup
{
    public static void Application_Start()
    {
        RouteTable.Routes.Add(
            new Route(
                "eventAggregation/events", 
                new MyHandlerProvider()
            )
        );        
    }
}

次に、アセンブリ全体の属性を使用します。

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MvcApplication1.Startup), "Application_Start")]

ビューに残っているのは、それを参照することだけです。

<script type="text/javascript" src="~/eventAggregation/events"></script>
于 2013-05-14T08:19:01.423 に答える
0

バンドルと RenderSection と @Scripts.Render(

例:

"@RenderSection("Scripts", true)".

サーバー側のコードを下に渡して、UI レイヤーにブリードしますか?

例:

データ属性または ID を要素に追加し、JavaScript でそれらを取得します。

<div id="MightyId" data-name="@item.attribute"></div>

$('#MightyId').data('名前')

またはスクリプトタグ内。

var ItemsList = "@item"

また:

var Items List = @Html.Raw(Json.Encode(object))  
于 2013-05-14T01:21:50.387 に答える