将C#属性读入JQuery代码

我正在尝试从我的代码隐藏文件中读取C#属性的值到一些JQuery脚本(见下文)。 我编写的JQuery选择器访问ASP.Net GridView,然后访问gridview中的CheckBox字段。 每当选中或取消选中复选框时,代码都会被命中,但我需要从后面的代码中访问C#属性,以根据属性的值采取适当的操作。

$(".AspNet-GridView-Normal > td > input").click(function() { //Need to access the C# property here //Take action here based on the value of the C# property }); 

这可能是显而易见的,但是在执行jQuery代码的客户端上不存在背后的代码。 您可以做的是将属性的值分配给服务器端的隐藏字段,以便在需要在客户端使用jQuery进行检查时,它将可用。 因此,您可以在客户端执行以下操作。

标记:

  

代码背后:

 hfValueINeedToKnow.Value = ; 

jQuery的:

 $("#<%= hfValueINeedToKnow.ClientID %>").val(); 

您可能需要进行一些小的更改以支持网格中每一行的值,但希望这可以解释一般的想法。

您在评论中提到该值为int。 我发现它也是你的代码隐藏中的public财产。 现在这很简单 – 你不需要逃避价值,也不需要以某种方式访问​​它,你可以免费获得类型安全:

  

好吧,你不能。

您需要在某个元素(可能是隐藏字段)中呈现C#属性,然后以这种方式查看它。

但进一步解释:你想检查什么财产?

我过去为这种情况所做的是将我的代码值打印到标记中并将其存储在javascript变量中,从而将其副本提供给客户端代码。 这是一个愚蠢的例子,但希望它有意义:

 <% var messsge = "Hello World!" %>      

没有一个非常干净的方法来做到这一点。 您最好的选择可能是使用ASP.NET内置的ClientScript.RegisterClientScriptBlockfunction。 这是一本很好的入门书 。

 private int myValue; protected void Page_Load(object sender, EventArgs e) { ClientScript.RegisterClientScriptBlock(typeof(Page), "vars", ""); } 

这会将页面上提供的脚本放在表单的顶部。 你也可以改变它。 显然,它不是最漂亮的; 你本质上是串联不同语言的字符串,但它会起作用,而简单的变量声明在眼睛上并不太粗糙。

嵌入JavaScript的ASP总是让我感到紧张,从脚本注入攻击的角度和无法对你的JavaScript进行unit testing。

这建立在一个更早的答案上:

  

您可以将其移动到隐藏变量:

  

然而,这并没有解决注射问题。 因此,您可以添加服务器端隐藏变量,并从ASP.NET中的Page_Load事件函数进行设置。

(您还需要脚本标记中的属性type =“text / javascript”以使其成为有效的HTML)。

如果你将你的值放入一个id为hfValueINeedToKnow的asp:HiddenField中,那么检索这个值客户端的最简单方法是

 var jsvar = $("[id$=hfValueINeedToKnow]").val(); 

因此,您也可以将此代码放在单独的.js文件中。