将值赋给javascript变量在C#Code Behind中

时间:2010-09-07 04:25:53

标签: c# javascript asp.net

如何从代码隐藏(C#)中为javascript变量赋值?

<script type="text/javascript">
String.prototype.trim = function () { return this.replace(/^\s+|\s+$/, ''); };
function ConstantByCode(_Obj, _Div) {
    var pl = new SOAPClientParameters();
    _Obj.value = _Obj.value.trim();
    pl.add("Code", _Obj.value);
    pl.add("Group", _Obj.Grp);
    alert(_Obj.Grp);
    var _Value = SOAPClient.invoke("ConstantWS.asmx", "GetConstantByCode", pl, false, CallBackEvent);
    if (_Value == null || _Obj.value == "" || _Obj.value == null || IsNumeric(_Obj.value) == false) {
        _Obj.value = "";
        _Div.innerHTML = "";
    }
    else {
        _Div.innerHTML = _Value;
    }
}


function CallBackEvent(r) {

}
function IsNumeric(input) {
    return (input - 0) == input && input.length > 0;
}

BehindCode

 txtCode.Attributes.Add("Grp", Me.ConstValue)
    txtCode.Attributes.Add("onchange", "ConstantByCode(this," & DivTitle.ClientID & ");")
    txtCode.Attributes.Add("onkeyup", "ConstantByCode(this," & DivTitle.ClientID & ");")

_obj.Grp现在有价值。 警告说:未定义

4 个答案:

答案 0 :(得分:1)

首先,您需要访问客户端上的值。我们可以通过将值存储在隐藏字段中或通过向控件添加属性来实现此目的。您似乎希望通过使用属性来执行此操作,因此请先执行此操作。

将以下内容添加到page_load方法中,以便我们可以访问客户端上的C#值。

protected void Page_Load(object sender,EventArgs e) {  string requiredJSValue =“把你的价值放在这里”;  txtCode.Attributes.Add(“CSCodeAttribute”,requiredJSValue); }

然后我们需要通过Javascript访问此值。首先,我们需要获取控件的客户端ID,因为C#将设置此值。注意。我正在使用Jquery来检索控件ID。这不是必需的,但我更喜欢它。 Jquery是一个javascript框架,可以从www.jquery.com下载

函数GetCSAttributeValue() {  var csControlID = $('#&lt;%= txtUOMCost.ClientID%&gt;'); //获取控件名称。  var requiredJSValue = csControlID .attr(“CSCodeAttribute”); //存储在变量中的值。 }

答案 1 :(得分:1)

我看到你想要检索作为自定义属性的Grp的值。您需要使用getAttribute函数 - 因此,您需要使用_Obj.Grp而不是_Obj.getAttribute("Grp")

另外,我发现你没有将客户端ID括在ode-behind的引号中。而不是

txtCode.Attributes.Add("onchange", "ConstantByCode(this," & DivTitle.ClientID & ");")

你需要说

txtCode.Attributes.Add("onchange", "ConstantByCode(this,'" & DivTitle.ClientID & "');")

请注意客户端ID周围的单引号(')。

此外,ConstantByCode js函数似乎正在使用div元素。因此,您需要为其添加行以从客户端ID转换为实际DOM。即。

function ConstantByCode(_Obj, _Div) {
   _Div = document.getElementById(_Div);
   .... // rest of the code

答案 2 :(得分:0)

我不是百分百肯定,但我认为你需要一个解决方法来实现这个目标。因为逻辑上在后端,javascript变量甚至不存在。您可以创建一个隐藏字段,并使其成为javascript变量和后面代码之间的桥梁。检查一下:http://forums.devx.com/showthread.php?t=164356

试试这个: 1.在.aspx页面中添加隐藏字段:

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

2。在代码隐藏中更改此字段的值:

protected void Page_Load(object sender, EventArgs e)
    {
        hidden.Value = "hello";
    }

3。编写以下脚本以访问该值并将其放入任何变量中:

<script type="text/javascript">
        if (document.getElementById("MainContent_hidden") != undefined) {
            var hiddenVal = document.getElementById("MainContent_hidden").value;
        }
        else {
            var hiddenVal = null;
        }
</script>

警告:第三部分很棘手。当我们调用getElementById函数时,我们没有使用我们在第一步中提供的相同ID。这是因为asp.net对此进行了更改,临时解决方法是运行页面一次并查看其来源。检查隐藏字段的id并将其放在getElementById函数内的第3步中。您可以寻找更好的替代方案,但现在可以根据需要使用它。如果你在第3步被击中,请告诉我。

答案 3 :(得分:0)

我不知道你的问题与代码有什么关系......
但是要从服务器端设置一个javascript值...你不能,因为服务器端代码在HTML进入客户端并且javascript被执行之前在服务器中运行。

但你可以做的是让你的服务器端代码生成一个保存你的价值的javascript。

<script type="text/javascript">
    var x = <%= ServerSideMethod() %>;
</script>