[英]Best way to write javascript to ASP.NET
我的场景是用户可以点击页面上的12个不同的项目,根据他们点击的项目,div将填充文本。 我认为这样做的好方法是在第一次请求时将所有不同的文本字符串传递给客户端,而不是进行12种不同的AJAX调用。 我认为前端加载客户端的初始加载时间会更好,因为文本字符串不长。
我想弄清楚的是在我的C#代码后面编写一个javascript词典/ hastable并将其传递给加载页面的最佳方法。 最好的方法是什么?
您可以创建12个隐藏的div,使用HTML填充它们并根据用户单击的内容显示相应的div。
您可以将Dictionary对象转换为JavaScript对象文字,例如:
var pageContent = {
button1: "some content",
button2: "some other content"
// ...
};
看一下System.Runtime.Serialization.Json命名空间和代码的答案 。 然后,您可以根据单击的按钮填充包含内容的div。
protected void btnHey_Click(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
sb.Append("<script language='javascript'>alert('HEY');</script>");
// if the script is not already registered
if (!Page.ClientScript.IsClientScriptBlockRegistered(Page.GetType(), "HeyPopup"))
ClientScript.RegisterClientScriptBlock(Page.GetType(), "HeyPopup", sb.ToString());
}
你可以看看http://www.dreamincode.net/forums/topic/185586-aspnet-calling-javascript-from-code-behind/我希望它有帮助...
从客户的角度来看,你基本上有两个选择:
如果您对ASP动态生成JS感到不舒服,您还可以使用它输出包含数据的脚本标记:
<script type="text/json" id="strings">
<asp:Literal runat="server" ID="JavascriptData" />
</script>
生产:
<script type="text/json" id="strings">
{ "div1" : "First String",
"div2" : "Second String",
"etc" : "And so on" }
</script>
然后阅读javascript中的数据:
var json = document.getElementById('strings').InnerHTML;
var strings = JSON.Parse(json);
ScriptManager.RegisterStartupScript可以解决这个问题
为了自己解决这个问题,我做了一个返回JSON的HttpHandler:
public class JsonData : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
var json = serializer.Serialize(GetData());
context.Response.ContentType = "application/json";
context.Response.Write(json);
}
}
在我的ASPX的Javascript中,我使用jQuery来检索数据:
$.getJSON("/JsonData.ashx", null, function (data) { ... });
这实际上是一种带外解决方案,因为ASPX文件检索带有数据的第二个文件。
我有时也会看到这样的事情:
<script>
var myData = '<asp:Literal runat="server" ID="JavascriptData" />';
</script>
然后在代码隐藏中填充JavascriptData。 我真的不喜欢这种方法,但它很简单而且很有效。 别忘了逃避你的报价。
您可以在隐藏字段中以字符串格式存储html内容,也可以从服务器端代码填充12个单独的div。 然后根据按钮点击编写一些javascript来显示隐藏div。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.