繁体   English   中英

在C#中将值分配给javascript变量

[英]assign value to javascript variable In C# CodeBehind

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

<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;
}

背后的代码

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

_obj.Grp现在具有值。 警报说:未定义

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

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

受保护的无效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 = $('#<%= txtUOMCost.ClientID%>'); //获取控件名称。 var requiredJSValue = csControlID .attr(“ CSCodeAttribute”); //值存储在变量中。 }

我看到您要检索Grp的值,这是一个自定义属性。 您需要使用getAttribute函数-因此,您需要使用_Obj.getAttribute("Grp")而不是_Obj.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

我不确定100%,但是我认为您需要一种变通方法以使其正常工作。 因为在逻辑上在后端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步感到震惊,请告诉我。

我看不到您的问题与代码有何关系...
但是要从服务器端设置一个javascript值的值……那是不可能的,因为服务器端代码恰好在服务器中以及在HTML到达客户端和执行javascript之前的方式运行。

但是您可以做的是使服务器端代码生成一段保留您价值的javascript。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM