渲染javascript服务器端

本文关键字:服务器端 javascript 渲染 | 更新日期: 2023-09-27 18:13:37

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

第一次回答后更新:我想包括例如@Scripts.Render("~/eventAggregation/events"),它应该在我的服务器上调用代码,用c#代码生成Javascript,这也是为了一个库,所以我不能用Razor页面或MvcController,我想让它接近SignalR的Hub代理,我看了看代码,但它的几百行代码注入动态生成的脚本,必须比这更容易吗?

渲染javascript服务器端

既然你说你不能使用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。只需编写一个静态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>

有bundle和RenderSection和@Scripts。呈现(

的例子:

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

你希望通过服务器端代码向下渗透到你的UI层吗?

的例子:

元素的data-attribute或id,并在JavaScript中获取它们。

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

$ (' # MightyId ') . data("名字")

或In script标签。

var ItemsList = "@item"

或:

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