渲染javascript服务器端

时间:2013-05-13 21:30:19

标签: c# asp.net-mvc-4

我想在服务器上创建一个非常简单的脚本(服务器端事件的客户端代理)。 什么是使用MVC4渲染脚本服务器端的最常见方式?

首次回答后更新: 我希望包含例如@Scripts.Render("~/eventAggregation/events"),它应该在我的服务器上调用生成带有C#代码的Javascript的代码,这也适用于lib,所以我不能使用Razor页面或MvcController,我想要它接近SignalR的Hub代理,我查看了那段代码,但是用于注入动态生成脚本的几百行代码必须比这更容易吗?

2 个答案:

答案 0 :(得分:1)

由于您声明无法使用MvcController或Razor视图,因此您可以更接近金属:IHttpHandler

首先写一篇:

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。只需编写静态启动类:

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>

答案 1 :(得分:0)

有捆绑包和RenderSection以及@ Scripts.Render(

示例:

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

您是否希望将服务器端代码传递到您的UI层?

示例:

数据属性或id到元素并在JavaScript中抓取它们。

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

$( '#MightyId')。数据( '姓名')

或者在脚本标记中。

var ItemsList = "@item"

OR:

var Items List = @Html.Raw(Json.Encode(object))