简体   繁体   中英

Avoid page reload on Button click having onClick and onClientClick events in ASP.NET

I have an Asp server control button for which I have onClick for processing code in code behind and onClientClick to process javascript code. The codes are:

Update: As per Icarus solution, updated codes :

Button source:

<asp:Button ID="Button1" runat="server" onclick="Button1_Click" 
        style="z-index: 1; left: 648px; top: 202px; position: absolute" 
        Text="Show route" OnClientClick="droute(); return false" />

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

Code behind:

protected void Button1_Click(object sender, EventArgs e)
{
    using (con = new MySqlConnection("server=localhost; uid=root;password=as64ws;database=Gmaps"))
    da = new MySqlDataAdapter("select * from routes where uid='" + Session["uname"].ToString() + "'", con);
    da.Fill(ds, "mroute");
    foreach (DataRow r in ds.Tables[0].Rows)
    {
        uroute.Add(r["latlng"].ToString());
    }
    croute = new string[uroute.Count];
    croute = uroute.ToArray();
    hdncroute.Value = string.Join("&", croute);
}

Javascript function:

function droute()
{
    var route=[];
    var temp;
    temp = eval(document.getElementById('<%= hdncroute.ClientID %>').value);
    route= temp.split('&');
    //Polyline icon n line settings
    var iconsetngs= {path:google.maps.SymbolPath.FORWARD_CLOSED_ARROW, fillColor:'#FF0000'};
    var polylineoptns= {strokeColor:'#3333FF',strokeOpacity:0.8,strokeWeight:3,map:map,icons:[{icon:iconsetngs,offset:'100%'}]};
    polyline= new google.maps.Polyline(polylineoptns);

    //Loop to add locations and draw line
    var path= polyline.getPath();
    for(var i=0;i<route.length;i++)
        {
            var marker= new google.maps.Marker({position:route[i],map:map});
            path.push(route[i]);
            google.maps.event.addListener(marker,'click',showiwindow);
        }

    //Event Listener's
    function showiwindow(event)
    {
    iwindow.setContent("<b>Coordinates are:</b><br/>Latitude:"+event.latLng.lat()+"<br/>Longitude:"+event.latLng.lng());
    iwindow.open(map,this);
    }  
}

I know that writing return false for javascript function will avoid refresh, and also onClick has void return type. But still my page reloads on button click.

You have an error here:

route = document.getElementById('<%= croute %>').value;

It should be:

route = document.getElementById('<%= croute.ClientID %>').value;

Update:

Markup - declare a hidden element in the page

<asp:hiddenfield id="hdnCroute" runat="server" />

//code behind

int [] croute = ... 

hdnCroute.Value = "["+string.Join(",",croute)+"]";

Now Javascipt:

//now you have an array back in javascript 
var route= eval(document.getElementById('<%= hdnCroute.ClientID %>').value); 

why the page reload?

OnClientClick="droute(); return false" 

at inner of browser like this:

button.onclick = function(){
    droute(); 
    return false
};

while droute is going wrong,so, return false doesn't work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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