在C# CodeBehind中给JavaScript变量赋值

4
如何从代码后台(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现在有值了。 警告提示:未定义


你遇到了什么错误? - Leniel Maccaferri
1
你可以使用这个代码替代 String.prototype.trim = function () { return this.replace(/^\s+|\s+$/, ''); };$.trim(value) - amiry jd
1
@Javad_Amiry 谢谢,但在那种情况下我必须使用纯JavaScript。 - Shahin
4个回答

1

我看到你想检索自定义属性Grp的值。你需要使用getAttribute函数-所以不是_Obj.Grp,而是使用_Obj.getAttribute(“Grp”)。

另外,我发现你在代码后面没有用引号括起客户端id。所以你应该使用

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

1

首先,您需要访问客户端上的值。我们可以通过将该值存储在隐藏字段中或向控件添加属性来实现此目的。看起来您希望使用属性来完成这个任务,所以我们先来做这个。

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

protected void Page_Load(object sender, EventArgs e) { string requiredJSValue = "put your value here"; txtCode.Attributes.Add("CSCodeAttribute", requiredJSValue); }

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

function GetCSAttributeValue() { var csControlID = $('#<%= txtUOMCost.ClientID %>'); //获取控件名称。 var requiredJSValue = csControlID .attr("CSCodeAttribute"); //存储在变量中的值。 }


0

我不是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,并将其放入第3步中的getElementById函数中。您可以寻找更好的替代方案,但现在可以使用这个。如果您在第3步遇到问题,请让我知道。


3
不应该硬编码控件的ClientId,应使用<%=hidden.ClientID %>。例如:var hiddenVal = document.getElementById("<%=hidden.ClientID %>").value; - Carlos Muñoz
1
尝试过这个,但没能让它工作。@shaahin,你可以尝试一下@Carlos的代码,如果它能够工作那就太棒了。 - Sidharth Panwar

0

我不明白你的问题与代码有什么关系...
但是要从服务器端设置JavaScript值,这是不可能的,因为服务器端代码在HTML发送到客户端并执行JavaScript之前就已经运行了。

但是你可以让服务器端代码生成一个包含你的值的JavaScript代码片段。

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

我有一个用户控件,其中有3个对象,它们的变量不同。 - Shahin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接