c# running a javascript and a codebehind function on same button?

awilderbeast
awilderbeast used Ask the Experts™
on
Hi all,
not sure if this is possible becuase a .net button on click has a value of javascript:dopostback_ etc


but basically, i want a code behind function to run then a javascript one i can make it do one or the other and at the moment the code is only doing the javascript one and ignoring the c# one

any ideas on how i can do this?
############################## aspx page
<script>
        $(document).ready(function () {
            $(".dialog-modal-history").dialog({
                height: 450,
                width: 700,
                autoOpen: false,
                modal: true,
                dialogClass: 'Dialog',
                title: 'Work History'
            });

            $('.butHistoryDialog').click(function () {
                $('.dialog-modal-history').dialog('open');
                // prevent the default action, e.g., following a link
                return false;
            });

            $('.dialogclose').click(function () {
                $('.dialog-modal-history').dialog('close');
                // prevent the default action, e.g., following a link
                return false;
            });
        });
        function HistoryClick() {
            dialog = document.getElementById("butHistoryDialog");
            dialog.click();
        }
    </script>
<asp:Repeater runat="server" ID="rptJobHistory" OnItemDataBound="rptJobHistory_OnItemDataBound">
                <ItemTemplate>
                    <tr class="<%# Container.ItemIndex % 2 == 0 ? "Odd" : "Even" %>">
                        <td>
                            <%# Eval("DateStart", "{0:MMM yyyy}")%>
                        </td>
                        <td>
                            <%# ifdatenotend(Eval("DateEnd", "{0:MMM yyyy}"))%>
                        </td>
                        <td>
                            <%# Eval("Title") %>
                        </td>
                        <td>
                            <%# Eval("Company") %>
                        </td>
                        <td>
                            
                            <asp:LinkButton ID="View" runat="server" CommandArgument=<%# Eval("ID") %>>Edit</asp:LinkButton>
                        </td>
                        <td>
                            <asp:LinkButton runat="server" OnClick="Delete" CommandArgument=<%# Eval("ID") %>>Delete</asp:LinkButton>
                        </td>

                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </table></td>
                <td><asp:Button ID="butAddJobHistory" runat="server" Text="Add History" SkinID="MessageButton" CssClass="opener" />
                <input runat="server" ID="butHistoryDialog" type="button" class="butHistoryDialog" clientidmode="Static" /></td>
            </tr>
        </table>

####################### code behind

    protected void rptJobHistory_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    { 
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            LinkButton ViewHistory = e.Item.FindControl("View") as LinkButton;

            ViewHistory.Click += new EventHandler(History);
            smUpdate.RegisterAsyncPostBackControl(ViewHistory);
            ViewHistory.Attributes.Add("onclick", "javascript:HistoryClick();");
        }
    }

Open in new window

Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2011

Commented:
OnClientClick event handler we can write your javascript right in the line and when the user thinks
the POST action will be canceled by returning false.

Author

Commented:
i did use onclientclick and it executed the wrong way round for my scenario, it loaded the dialog then iflled it (or atleast seemed to)

im not sure my updatepanel is functionign correctly

can i use onclick and onclientclick together then?
Top Expert 2015

Commented:
You could register a client script block that either calls a function on the page or you could write out the javascript function in code behind and paste the whole thing into csText1 in the following example. You could place it at the end of OnItemDataBound, however, you will want to check if the script is already registered because OnItemDataBound runs repeatedly, once for each item in the repeater.    

ClientScriptManager cs = Page.ClientScript;

    // Check to see if the startup script is already registered.
    if (!cs.IsStartupScriptRegistered(cstype, csname1))
    {
      String cstext1 = "alert('Hello World');";
      cs.RegisterStartupScript(cstype, csname1, cstext1);
    }
Learn Ruby Fundamentals

This course will introduce you to Ruby, as well as teach you about classes, methods, variables, data structures, loops, enumerable methods, and finishing touches.

Author

Commented:
the below just runs the javascript function, the c# function isnt run at all

not sure i follow you tommyboy never seen this method before can you show me an example?

Thanks
protected void rptJobHistory_OnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            LinkButton ViewHistory = e.Item.FindControl("View") as LinkButton;
            ViewHistory.Click += new EventHandler(LoadHistory);
            ViewHistory.OnClientClick = "javascript:HistoryClick();";
            smUpdate.RegisterAsyncPostBackControl(ViewHistory);

        }
    }

Open in new window

Top Expert 2011

Commented:
check the rendered HTML for existing of "onclick="javascript:HistoryClick();"
Top Expert 2015

Commented:
What event triggers the code behind function to run, the butAddJobHistory button click? Then in the click handler for that button, do what you need to do in C# then use the RegisterStartUpScript function to print a javascript call to the response. When the page reloads on the client end the javascript will be called. What javascript function are you wanting to call, the HistoryClick()? Then in the button click handler end with:

    ClientScriptManager cs = Page.ClientScript;

    // Check to see if the startup script is already registered.
    if (!cs.IsStartupScriptRegistered(cstype, csname1))
    {
      String cstext1 = "HistoryClick();";
      cs.RegisterStartupScript(cstype, csname1, cstext1);
    }
Top Expert 2015

Commented:
Working sample of RegisterClientScriptBlock.
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace testApp1
{
    public partial class Default2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ClientScriptManager cs = Page.ClientScript;

            // Check to see if the startup script is already registered.
            if (!cs.IsStartupScriptRegistered(this.GetType(), "test"))
            {
                String cstext1 = "HistoryClick();";
                cs.RegisterStartupScript(this.GetType(), "test", cstext1, true);
            }

        }
    }
}

Open in new window

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default2.aspx.cs" Inherits="testApp1.Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script type="text/javascript">
    function HistoryClick() {
            alert("HistoryClick is running");
            dialog = document.getElementById("butHistoryDialog");
            dialog.click();
        }
    </script>
</head>
<body>
<form id="form1" runat="server">
<div id="container"></div>
</form> 
</body>
</html>

Open in new window

i couldnt get the above working

but i found an easier way! i just used c# to change a public string that set what class the div had to either show or hide the dialog

thanks for the help though :)

Author

Commented:
had to use alternate method

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial