我想在服务器上创建一个非常简单的脚本(服务器端事件的客户端代理)。 什么是使用MVC4渲染脚本服务器端的最常见方式?
首次回答后更新:
我希望包含例如@Scripts.Render("~/eventAggregation/events")
,它应该在我的服务器上调用生成带有C#代码的Javascript的代码,这也适用于lib,所以我不能使用Razor页面或MvcController,我想要它接近SignalR的Hub代理,我查看了那段代码,但是用于注入动态生成脚本的几百行代码必须比这更容易吗?
答案 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))