将C#属性读入JQuery代码

将C#属性读入JQuery代码,c#,asp.net,jquery,properties,C#,Asp.net,Jquery,Properties,我试图将代码隐藏文件中的C#属性值读入一些JQuery脚本(见下文)。我编写的JQuery选择器访问ASP.NETGridView,然后访问GridView中的复选框字段。无论何时选中或取消选中复选框,代码都会被点击,但我需要从代码隐藏中访问C#属性,以便根据属性的值采取适当的操作 $(".AspNet-GridView-Normal > td > input").click(function() { //Need to access the C# prop

我试图将代码隐藏文件中的C#属性值读入一些JQuery脚本(见下文)。我编写的JQuery选择器访问ASP.NETGridView,然后访问GridView中的复选框字段。无论何时选中或取消选中复选框,代码都会被点击,但我需要从代码隐藏中访问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

     });
你不能

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


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

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

标记:

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

代码隐藏:

hfValueINeedToKnow.Value = <some value>;
hfvalueinedtoknow.Value=;
jQuery:

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

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

我过去在这个场景中所做的是将代码值打印到标记中,并将其存储在javascript变量中,从而使客户端代码可以使用它的副本。这是一个愚蠢的例子,但希望它有意义:

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

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

函数ShowMessage()
{
var msg='';
如果(味精)
警报(msg);
}

您在评论中提到该值是一个int。我发现它也是codebehind中的一个
public
属性。现在这很简单-您不需要转义该值,也不需要以某种方式访问它,并且您可以免费获得类型安全性:

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

    var AvailableInstalls = <%= AvailableInstalls %>;

});
</script>

$(“.AspNet GridView Normal>td>input”)。单击(函数(){
var AvailableInstalls=;
});

没有一种真正干净的方法可以做到这一点。您最好使用ASP.NET中内置的
ClientScript.RegisterClientScriptBlock
功能

private int myValue;
受保护的无效页面加载(对象发送方、事件参数e){
ClientScript.RegisterClientScriptBlock(类型)(第页),
“vars”,“var myParams={p1:“+myValue+”,p2:“我的名字”};”;
}

这将使页面上提供的脚本朝向表单顶部。你也可以改变。显然,它不是最漂亮的;本质上,您是在串接不同的语言,但它会起作用,而且对于简单的变量声明来说并不太粗糙。

JavaScript中嵌入的ASP总是让我感到紧张,因为脚本注入攻击和无法对JavaScript进行单元测试

这是基于一个更早期的答案:

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

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

});
</script>

$(“.AspNet GridView Normal>td>input”)。单击(函数(){
var AvailableInstalls=$(“#MyHidden”).val();
});
您可以将其移动到隐藏变量:

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

然而,这并不能解决注射的问题。因此,您可以添加一个服务器端隐藏变量,并通过ASP.NET中的Page_Load event函数进行设置


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

如果要将值放入id为hfValueINeedToKnow的asp:HiddenField中,从客户端检索该值的最简单方法是

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

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

该属性只是后面代码中的一个int,如下所示:public int AvailableInstalls{get;set;}好的,我们用隐藏字段的方式来实现。MarkKanof已经给了你做这件事的确切代码。我是在Rails中做的。Rails允许您向AJAX请求发送javascript响应,一旦收到请求,就会在客户端执行。但是,生成此javascript的代码可能包含任意嵌入的ruby语句(例如,访问属性以确定输出)。您可以搜索ASP.Net是否支持类似的内容。C#属性仅存在于服务器端,因此必须通过服务器端处理完成此逻辑。单击复选框时是否需要修改该值?因此,如果开始时AvailableInstalls设置为10,是否需要在单击复选框时增加/减少变量?是的,每次选中复选框时都需要减少变量,并且每次取消选中复选框时都会增加。在这种情况下,由crescent fresh提出并由Ben Duguid更新的解决方案可能是最直接的方法。如果需要获取回发页面上AvailableInstalls变量的当前值,可以将其与我的方法结合使用。因此,本质上是不断更新隐藏字段的值,以便该值在回发时可用。我在读取HiddenField的值时遇到问题,下面是我用来访问它的JQuery代码:var availableInstalls=$(“#”).val();我在代码隐藏的PageLoad方法中将隐藏字段的值设置为“2”,但在调试模式下遍历时,对于var AvailableInstalls,我总是得到一个值“undefined”。你知道是什么原因导致了这种情况吗?@Russ Clark-你的HTML中隐藏的输入字段出现了什么,jQuery选择器中的实际呈现值是什么?这一点非常有用。非常感谢。寻找这个动作分解已经有一段时间了。根据OP后面的评论“每次选中复选框时变量需要递减,每次取消选中复选框时变量需要递增”在函数外部声明JS变量,但这应该可以很好地工作。
var jsvar = $("[id$=hfValueINeedToKnow]").val();