【问题标题】:Best way to write javascript to ASP.NET将 javascript 写入 ASP.NET 的最佳方式
【发布时间】:2012-10-22 02:00:13
【问题描述】:

我的场景是用户可以点击页面上的 12 个不同的项目,根据他们点击的项目,一个 div 将填充文本。我在想一个很好的方法是在第一次请求时将所有不同的文本字符串传递给客户端,而不是进行 12 次不同的 AJAX 调用。我认为使用初始加载时间预先加载客户端会更好,因为文本字符串无论如何都不长。

我想弄清楚的是在我的 C# 代码中编写 JavaScript 字典/hastable 并将其传递给加载页面的最佳方法。最好的方法是什么?

【问题讨论】:

  • 显示您的方式,以便我们推荐最佳方式

标签: c# javascript asp.net .net


【解决方案1】:
  • 您可以创建 12 个隐藏的 div,用 HTML 填充它们并根据用户单击的内容显示相应的。

  • 您可以将 Dictionary 对象转换为 JavaScript 对象字面量,例如:

var pageContent = {
    button1: "some content",
    button2: "some other content"
    // ...
};

查看System.Runtime.Serialization.Json Namespacethis answer 的代码。然后,您可以根据单击的按钮使用内容填充 div。

【讨论】:

    【解决方案2】:
    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/,希望对你有帮助...

    【讨论】:

      【解决方案3】:

      从客户的角度来看,您基本上有两种选择:

      1. 在页面加载时触发 AJAX 调用以异步获取数据。 (见 Sjoerd 的回答)
      2. 让 ASP 将数据直接推送到您的 HTML/JavaScript 中。 (参见 Ewerton / Scorpio 的回答)

      如果你不喜欢让 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);
      

      【讨论】:

        【解决方案4】:

        ScriptManager.RegisterStartupScript 可以解决问题

        【讨论】:

        • 是的,我正在考虑这样做,看起来他们可能是一个更好的方法。例如一种只将字典写入源而不是构建 javascript 字符串的方法。
        • 查看 ScrptManager.RegisterArray(),它只会创建变量
        【解决方案5】:

        为了自己解决这样的问题,我做了一个返回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。我不太喜欢这种方法,但它很简单而且很有效。不要忘记转义引号。

        【讨论】:

          【解决方案6】:

          您可以将 html 内容以字符串格式存储在隐藏字段中,或者您可以从服务器端代码中填充 12 个单独的 div。然后根据按钮点击编写一些javascript来显示隐藏div。

          【讨论】:

            猜你喜欢
            • 2015-01-29
            • 1970-01-01
            • 2010-10-29
            • 2012-11-12
            • 2010-11-26
            • 2018-09-09
            • 1970-01-01
            • 1970-01-01
            • 2012-04-27
            相关资源
            最近更新 更多