我的场景是用户可以点击页面上的 12 个不同的项目,根据他们点击的项目,一个 div 将填充文本。我在想一个很好的方法是在他们第一次请求时将所有不同的文本字符串传递给客户端,而不是进行 12 次不同的 AJAX 调用。我认为使用初始加载时间预先加载客户端会更好,因为文本字符串无论如何都不长。
我想弄清楚的是在我的 C# 代码后面编写 javascript 字典/hastable 并将其传递给加载页面的最佳方法。最好的方法是什么?
我的场景是用户可以点击页面上的 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。