2009-08-19 58 views
6

我想从我的代码后面的文件中读取C#属性的值到一些JQuery脚本(请参见下文)。我写的JQuery选择器访问一个ASP.Net GridView,然后访问gridview中的一个CheckBox字段。每当复选框被选中或取消选中时,代码被击中,但我需要从后面的代码中访问C#属性,以根据属性的值采取适当的操作。将C#属性读入JQuery代码

$(".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 

    }); 
+0

我在Rails中做了这个。 Rails允许你向AJAX请求发送javascript响应 - 一旦接收到,它就会在客户端执行。然而,生成此JavaScript的代码可以具有任意嵌入的ruby语句(例如,像访问属性以确定输出)。你可以搜索ASP.Net是否支持类似的东西。 C#属性只存在于服务器端,所以这个逻辑必须通过服务器端处理完成。 – Gishu 2009-08-19 14:11:27

+0

您需要修改值作为复选框单击?因此,如果您将AvailableInstalls设置为10,那么您是否需要在单击复选框时增加/减少变量? – 2009-08-19 14:29:01

+0

是的,每选中一个复选框,变量就需要递减,每当复选框未被检查时递增。 – 2009-08-19 14:46:49

回答

12

这可能是显而易见的,但后面的代码不存在于执行jQuery代码的客户端。你可以做的是将属性的值赋给服务器端的隐藏字段,这样当你需要在客户端使用jQuery检查它时,它将可用。所以你可以在客户端进行以下操作。

标记:

<asp:HiddenField ID="hfValueINeedToKnow" runat="server"/> 

代码背后:

hfValueINeedToKnow.Value = <some value>; 

的jQuery:

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

您可能需要进行一些小的改动,以支持一个值网格中的每一行,但希望这解释了总体思路。

+0

我在阅读HiddenField的值时遇到问题,下面是我用来访问它的JQuery代码: var availableInstalls = $(“#<%= hfAvailableInstalls.ClientID%>”)。 我在后面的代码中的PageLoad方法中将隐藏字段的值设置为“2”,但当我以调试模式浏览时,我始终为var AvailableInstall获取“undefined”的值。任何想法可能造成这种情况? – 2009-08-19 14:44:33

+0

@Russ Clark - HTML中隐藏的输入字段出现什么,以及jQuery选择器中的实际呈现值? – 2009-08-19 15:12:09

+0

至于点,真的很有帮助。谢谢。一直在寻找这种行动的分解。 – wilsonlego 2013-10-24 10:19:22

1

那么你不能。

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

但是请进一步解释:你想要检查什么属性?

+0

该属性只是在后面的代码int,如下所示: public int AvailableInstalls {get;组; } – 2009-08-19 14:03:44

+0

好吧,做好隐藏领域的方式吧。马克Kanof已经给你确切的代码来做到这一点。 – 2009-08-19 14:05:49

0

过去我为这个场景所做的工作是将我的代码值打印到标记中并存储它在JavaScript变量中的任何内容,从而将它的副本提供给客户端代码。这是一个愚蠢的例子,但希望它是有道理的:

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

<html> 
<head> 
<script type="text/javascript"> 
    function ShowMessage() 
    { 
     var msg = '<%= message %>'; 
     if(msg) 
      alert(msg); 
    } 
</script> 
</head> 
</html> 
2

您在评论该值是一个int提及。我看到它也是您的代码隐藏中的public属性。现在,这是微不足道的 - 你不需要逃避价值,也不能访问它在一些迂回的方式,你会得到类型安全免费:

<script> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = <%= AvailableInstalls %>; 

}); 
</script> 
+0

基于来自OP的后面的评论,“每次检查复选框时都需要减少变量,并且在每次取消选中复选框时增加”在函数外部声明JS变量,但这应该很好地工作。 – 2009-08-19 15:09:35

0

没有一个非常干净的方式做这个。您最好的选择可能是使用内置于ASP.NET中的ClientScript.RegisterClientScriptBlock功能。 Here's a good primer

private int myValue; 

protected void Page_Load(object sender, EventArgs e) { 
    ClientScript.RegisterClientScriptBlock(typeof(Page), 
     "vars", "<script>var myParams = { p1: " + myValue + ", p2: 'My Name' };</script>"); 
} 

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

0

ASP嵌入式JavaScript总是让我感到紧张,从脚本注入攻击的角度以及无法对您的JavaScript进行单元测试。

这建立在一个ealier答案:

<script type="text/javascript"> 
$(".AspNet-GridView-Normal > td > input").click(function() { 

    var AvailableInstalls = $("#MyHidden").val(); 

}); 
</script> 

你可以将它移动到一个隐藏的变量:

<input type="hidden" id="#MyHidden" value="<%= AvailableInstalls %>" /> 

然而,这并不周围注射的问题得到。所以你可以添加一个服务器端的隐藏变量,并通过ASP.NET中的Page_Load事件函数来设置它。你也需要脚本标记中的属性type =“text/javascript”来使其成为有效的HTML)。

0

如果你把你的值到一个asp:HiddenField ID为hfValueINeedToKnow,检索该值客户端最简单的方法是

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

所以,你也可以将此代码放在一个单独的.js文件。