如何将数据从 c# 传递到 jquery/javascript
本文关键字:jquery javascript 数据 | 更新日期: 2023-09-27 18:32:32
我有一个函数,我想在页面加载时运行,所以要么在document.ready要么在pageLoad中。
使用jquery,我将使用函数的类名触发该函数
在文档中.就绪
var span = $('.linkify');
span.html(textToLinks(span.html()));
别处
function textToLinks(text) {
var exp = /(my text)/ig;
return text.replace(exp, "<a class='link' href='http://www.bbc.co.uk' target='_blank' >$1</a>");
}
现在这适用于简单的测试数据,但我现在需要弄清楚如何扩展功能。
我的 c# 应用中有一个术语列表以及相关的 URL。我正在考虑将此数据作为字符串传递并拆分,但是我的JavaScript知识有很多漏洞。
所以我想我有 3 个问题:
- 加载页面时,如何将字符串放入函数中?
- 字符串的类型是否正确,或者我可以传递其他字典对象吗?
- 如何有效地循环访问传递的每个术语?
提前谢谢。
你可以做的是,使用 JQuery Ajax 调用来检索服务器端数据。
但这需要您设置将公开的服务。您可以通过快捷方式执行此操作,而无需设置服务。
但这需要混乱的逻辑。(这是捷径:))
您可以在页面中创建一个属性,将 JSON 数据公开为字符串。您可以通过以下方式读取 JavaScript 中的 JSON 数据
var data =<% GetData() %>
您可以在对象上定义 ToJson 以将对象转换为 JSON 字符串
public static string ToJSON(this object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer(new SimpleTypeResolver());
return serializer.Serialize(obj);
}
public string GetData()
{
return (new {SomeData}).ToJson();
}
注意 SomeData 是一个包含您的数据(即 url 数组)或您选择的任何表示形式的类。
然后循环数据以构建动态 html
@Anand是正确的,你可以使用jQuery Ajax来检索服务器端数据。
但是,根据您想要执行的操作,您也许可以以另一种方式执行此操作。
可以使用 .net JavascriptSerializer
类将数据序列化为 JSON 格式。 JSON是一个非常好的工具,如果你还不熟悉它,可以熟悉它。
JavascriptSerializer
会将您的 JSON 放在一个字符串中,然后您可以将其放入隐藏的输入中并使用您的 Javascript 代码读取。 这样做的好处是不需要第二个HTTP请求,就像jQuery Ajax一样。
如果您在加载页面时提前获得了数据,则可以将 JSON 直接写入页面,然后使用该 javascript 对象执行任何您需要的操作。
我不知道你使用的是MVC还是WebForms,但想法基本相同:
例如(使用 JSON.NET 进行序列化):
<script id="some-data" type="application/json">
<%= JsonConvert.SerializeObject(someDotNetObject) %>
</script>
<script type="text/javascript">
var _someJsObject = JSON.parse(document.getElementById("some-data").innerHTML);
</script>
现在_someJsObject
是一个javascript对象,代表你开始使用的数据,你可以用它做任何你想做的事情,比如循环遍历数组等。
旁注 - 如果你的目标是IE7,你需要使用类似json2.js的东西来获取JSON解析。
另一种可能的方法是在 C# 代码中的页面加载时编写 javascript 函数。然后,这将在呈现时添加到页面中,并且可以由 document.ready() 上的 jQuery 执行;或任何其他功能/事件。
示例代码:
string FunctionStr = "<script type='"text'javascript'">function textToLinks(text) {" +
"var exp = /(my text)/ig;" +
"return text.replace(exp, '"<a class='link' href='http://www.bbc.co.uk' target='_blank' >$1</a>'");" +
"}</script>";
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "Some JS Function", FunctionStr);
阿南德和丹尼尔的答案可能更适合您想要的方法,但如果您想要的话,这是第三种选择。
这样做:
在代码隐藏的 C# 类中声明公共成员
public string mystring;
在初始化或加载事件中启动它并将其写在你的js函数上
var exp = '<%=mystring %>';
它应该适用于字符串。对于字典,你可以尝试做Ajax