Show/hide divs according to server side variable

  • Thread starter Thread starter Mike P
  • Start date Start date
M

Mike P

How would I show or hide a div that is using client side Javascript
based upon a server side variable?

Here are my divs :

<div id="idButton5" class="otherLeftBarLink" onmouseover="javascript:
changeStylesMouseOver('5');" onmouseout="javascript:
changeStylesMouseOut('5');" onclick="location='/AddProject.aspx'">
<div class="leftBarLinkText">
Add Project
</div>
</div>
<div id="idButton7" class="otherLeftBarLink"
onmouseover="javascript: changeStylesMouseOver('7');"
onmouseout="javascript: changeStylesMouseOut('7');"
onclick="location='/AddTask.aspx'">
<div class="leftBarLinkText">
Add Task
</div>
</div>

I want to use a variable that is being set in the Page_Load event to
determine whether I show or hide each of these divs.
 
If you add the attribute runat="server" to the divs, you will be able to
programmatically reference them as a server side control.

For example

//asp.net
<div runat="server" id="idButton5" class="otherLeftBarLink"
onmouseover="javascript:
changeStylesMouseOver('5');" onmouseout="javascript:
changeStylesMouseOut('5');" onclick="location='/AddProject.aspx'">
<div class="leftBarLinkText">
Add Project
</div>
</div>


//c#

protected void Page_Load(object sender, EventArgs e)
{
this.idButton5.Visible = false;
}


Obviously this c# can be extended to check a variable that exists in the
class, and thus conditionally show the div.

If you are rendering the Div using a Repeater or other databound control,
you may not be able to do this directly, but would need to first find the
control within the repeater in order to access it programmatically.

Good luck,
BWC
 
In the page load event register some custom javascript to include on
the page, e.g.

protected void Page_Load(object sender, EventArgs e)
{
// build custom javascript string based on server parameter
string myJavascript = "var myParameter = '" + this.MyParameter +
"';";
// register script on page
Page.ClientScript.RegisterClientScriptBlock(
Page.GetType(), "MyScript", myJavascript, true);
// now myParameter can be used in javascript code on the page
}
private string MyParameter
{
get { ... }
}


Alternatively you could put runat="server" on the divs and set the
Visible property as you would on a server control, but that's entirly
server side, not javascript.

Terry.
 
I am setting runat="server" on the divs and set the
Visible property as you would on a server control, but whenever my code
calls one of my Javascript functions I get the error 'object required'
when I am passing the div id to the function changeStylesMouseOver(id).
But this works fine when I don't set runat="server".

Any ideas why?
 
I am setting runat="server" on the divs and set the
Visible property as you would on a server control, but whenever my code
calls one of my Javascript functions I get the error 'object required'
when I am passing the div id to the function changeStylesMouseOver(id).
But this works fine when I don't set runat="server".

Any ideas why?

*** Sent via Developersdexhttp://www.developersdex.com***

The server side Visible property will cause the control not to be
rendered out to the browser.

To have it there but hidden change the CSS style properties of the
control rather than the Visible property.

Terry.
 
In addition, marking the div tag as runat=server will have changed its ID
when it is rendered on the client.

In order to get access to the div tag with a modified name, you have a
number of options:

1: Reference it as an object in javascript, notice the use of the keyword
"this" in the following javascript statements :
<div id="idButton5" class="otherLeftBarLink" onmouseover="javascript:
changeStylesMouseOver('5', this);" onmouseout="javascript:
changeStylesMouseOut('5', this);" onclick="location='/AddProject.aspx'">

You would then be able to set a class on "this" by defining the
changeStylesMouseOver thusly:

function changeStylesMouseOver(intButtonId, divElement)
{
divElement.className = "someCSSClass";
}

2: Render the Control.ClientID server side value into the javascript context:
<script language="javascript">
function changeStylesMouseOver(intButtonId)
{
document.getElementById("<%= this.idButton5.ClientID %>").className =
"someCSSClass";
}
</script>


Good luck,
BWC
 
Back
Top