繁体   English   中英

如何从C#代码中传输序列化的JSON字符串以在Javascript中使用

[英]How to transfer a serialized JSON string from C# code behind to use in Javascript

这里的最终目标是从C#代码后面的对象填充Bootstrap模态的字段,该对象包含我需要的所有数据。 我从后面的代码序列化了对象,如下所示:

JavaScriptSerializer serializer = new JavaScriptSerializer();
sJSON = serializer.Serialize(aerationsystem.AerationSystem);

现在,我想在我的Javascript函数中引用该JSON,如下所示:

</form>
    <script type="text/javascript">
        function fillModal() {
            var diameterValue = document.getElementById('diameter');            
            var aeration = <%# sJSON %>;
            diameterValue.innerText = aeration.dBinDiameter;
        }
    </script>
</asp:Content>

(我包括了结束表单标记和结束asp:Content标记,因此大家都可以看到我在文件的最后放置了Javascript的位置。)

但是,当我调用该Javascript函数时,这是在浏览器的调试器中看到的内容:

    <script type="text/javascript">
        function fillModal() {
            var diameterValue = document.getElementById('diameter');            
            var aeration = ;
            diameterValue.innerText = aeration.dBinDiameter;
        }
    </script>

我从这里得到的想法是: 任何将c#代码后面的对象传递给javascript的方法? 但是,访问该JSON变量的方法对我不起作用。 我曾尝试移动脚本,但是这样做时,出现一个错误,提示“无法修改控件集合,因为控件包含代码块(即<%...%>)。” 而且我尝试了其他定界符,例如<%=%>,但是根据脚本的放置位置,我也会遇到相同的错误。 我究竟做错了什么? 如何获取该JSON字符串以显示在Javascript函数中?

<%# %>是一个绑定块,因此无论在Page_Load还是Page_PreRender事件中,都需要调用Page.DataBind()方法。

您还需要整理字符串,以便JSON文本不会破坏您的JavaScript:

var aeration = '<%# sJSON.Replace("'", "\'").Replace("\n", " ") %>';

<%# %>语法用于绑定来自数据源的数据。

最简单的方法是使用文字服务器控件。 脚本标记内部似乎有点怪异,但却可以完成任务。

<script type="text/javascript">
    function fillModal() {
        var diameterValue = document.getElementById('diameter');
        var aeration = <asp:Literal id="JsonLiteral" runat="server"/>;
        diameterValue.innerText = aeration.dBinDiameter;
    }
</script>

背后的代码

JavaScriptSerializer serializer = new JavaScriptSerializer();
JsonLiteral.Text = serializer.Serialize(aerationsystem.AerationSystem);

非常感谢您抽出宝贵的时间回答我的问题! 我终于从大家那里得到一些启发,终于解决了这个问题。 我最终没有使用Literal控件,而是在页面上使用了<asp:HiddenField>控件来存储值。 然后,我将其值提取到Javascript变量中。

隐藏的字段: <asp:HiddenField ID="JsonLiteral" runat="server" />

分配值的事件中的代码:

JavaScriptSerializer serializer = new JavaScriptSerializer();
JsonLiteral.Value = serializer.Serialize(aerationsystem.AerationSystem);

完成工作的JavaScript:

function fillModal() 
    {
        $(document).ready(function () {
            var diameter = document.getElementById('diameter');
            var control = document.getElementById('<%= JsonLiteral.ClientID%>');
            var aeration = JSON.parse(control.value);

            diameter.innerText = aeration.dBinDiameter;
        });
    }

(当然,不仅仅可以拥有一个物业,而且还有很多其他功能。)

再次感谢大家的帮助,因为没有你我做不到!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM