Shahin
Shahin

Reputation: 12843

assign value to javascript variable In C# CodeBehind

How can i assign value to javasctipt variable from code-behind (C#)?

<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 has now value. alert said : undefined

Upvotes: 4

Views: 11835

Answers (4)

VinayC
VinayC

Reputation: 49185

I see that you want to retrieve value of Grp that is a custom attribute. You need to use getAttribute function - so instead of _Obj.Grp, you need to use _Obj.getAttribute("Grp").

Also, I see that you are not enclosing client id in quotes from ode-behind. So instead of

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

you need to say

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

Note the single quote(') around the client id.

Further, ConstantByCode js function appears to be taking div element. Hence, you need to add line to it for converting from client id to actual DOM. i.e.

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

Upvotes: 1

Elixir
Elixir

Reputation: 367

Firstly you will need to have access to the value on the client. We can do this by storing the value in a hiddenfield or by adding an attribute to the control. It seems you wish to do this by using an attribute so lets do this first.

add the following to your page_load method so we have access to the C# value on the client.

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

We then need to access this value through Javascript. Firstly we will need to get the client ID of the control as C# will set this value. Note. I am using Jquery to retrieve the control ID. This is not required, however I prefer it. Jquery is a framework for javascript and can be downloaded from www.jquery.com

function GetCSAttributeValue() { var csControlID = $('#<%= txtUOMCost.ClientID %>'); //Gets the control name. var requiredJSValue = csControlID .attr("CSCodeAttribute"); //Value stored in variable. }

Upvotes: 1

Carlos Mu&#241;oz
Carlos Mu&#241;oz

Reputation: 17804

I don'see how your question is related to the code...
But to set a value of a javascript value from serverside... well you can't, because server side code runs precisely in the server and way before the HTML goes to the client and javascript gets executed.

But what you can do is make your server side code generate a piece of javascript that holds your value.

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

Upvotes: 0

Sidharth Panwar
Sidharth Panwar

Reputation: 4654

I'm not 100% sure but I think you'll need a workaround to get this working. Because logically at the backend the javascript variable doesn't even exist. You can probably create a hidden field and make it a bridge between the javascript variable and code behind. Check this: http://forums.devx.com/showthread.php?t=164356

Try this: 1. Add a hidden field in you .aspx page:

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

2. Change the value of this field in your code-behind:

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

3. Write the following script to access the value and put it in any variable:

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

WARNING: The third part is tricky. We are not using the same ID that we provided in the 1st step when we are calling the getElementById function. This is because asp.net changes this and the temporary workaround is to run the page once and view its source. Check the id of the hidden field and put it in step 3 inside the getElementById function. You can look for better alternatives but for now use this if you want. If you're struck at step 3, let me know.

Upvotes: 0

Related Questions