Feb 26
2010

If a user tries to hit an ASP.NET submit button more than once only the very first request should submit to server.
All other clicks shouldn't make any request. So, for this you need to disable the button when first time click on button and enable it after processed.

Example 1)  in codebehind:
   
   /// <summary>
   /// OnInit stage
   /// </summary>
   /// <param name="e"></param>
   protected override void OnInit(EventArgs e)
   {
        base.OnInit(e);
        btnDataSave.Attributes.Add("onclick", "javascript:" + btnDataSave.ClientID + ".disabled=true;"  + ClientScript.GetPostBackEventReference(btnDataSave, string.Empty));
    }
  
  The method "ClientScript.GetPostBackEventReference" allows you to create the "__doPostBack Script" code which causes a serverside postback. 
  
  
  or example 2) in aspx:
  
            <asp:Button
                ID="btnDataSave"
                runat="server"        
                Text="SAVE"
                OnClientClick='this.disabled=Page_ClientValidate("valgrpData");'
                UseSubmitBehavior="false"
                ToolTip="save data"
                ValidationGroup="valgrpData" />
      
   using this js function:
   
   //check if clientside validation of a single validationgroup is valid
   //returns a boolean value
   function Page_ClientValidate(valGrp)
   {
      Page_InvalidControlToBeFocused = null;
      if (typeof(Page_Validators) == "undefined")
      {
        return true;
      }
      var i;
      for (i = 0; i < Page_Validators.length; i++)
      {
         ValidatorValidate(Page_Validators[i], valGrp, null);
      }
      ValidatorUpdateIsValid();
      ValidationSummaryOnSubmit(valGrp);
      Page_BlockSubmit = !Page_IsValid;
      return Page_IsValid;
   }
      
The button will only be disabled when page validation passed successful.   
   
Problem when using both ways:
In Firefox the disabled button looks the same like an enabled button, in IE it works.
This could irritate the user. Well this is a different behaviour of browsers.
But if necessary there may be more complex ways to solve this problem for example
using different styles or images for the button.

    
Thanxs for Praveen Kumar Battula for his initial idea i found at
http://praveenbattula.blogspot.com/2010/01/disable-button-in-onclick-and-process.html

Tags:
Apr 14
2009

Im allgemeinen verursacht ein ASP.NET LinkButton einen PostBack. Vereinzelt ist es jedoch notwendig, trotz einer Aktion auf dem Button den PostBack zu unterdrücken.  Mit einem simplen "return false;" im clientseitigen Eventhandler läßt sich das PostBack unterdrücken:

<script language="javascript" type="text/javascript">
    function alertMessage()
    {
        alert('Ich bin ein LinkButton, der keinen Postback verursacht!');
        return false;
    }
</script>

<asp:Button
    ID="btnTestAlert"
    runat="server"
    Text="abschicken"
    ToolTip="Ich bin ein ToolTip zum Button btnTestAlert"
    OnClientClick="return alertMessage();" />

 

Tags:
Mar 03
2009

Das Virtual Earth Kartencontrol erlaubt ab der Version 6.2 die Lokalisierung seiner Controls. Dazu muss lediglich bei der Einbindung des Plugins ein weiterer Parameter angehängt werden:

<script type="text/javascript" src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2&mkt=de-DE"></script>

Weiteres siehe auf der Microsoft Website unter Returning Localized Results.
Tags: Tags:
Feb 10
2009

Um per JavaScript in ASP.NET auf eine Checkbox zuzugreifen und deren Checked-Status abzurufen, kann man sich unterschiedlicher Syntax bedienen. Es ist jedoch zu beachten, dass Browser wie der IE oder der FF unterschiedlich reagieren können. Im schlechtesten Fall ignoriert der Browser den Code komplett, wenn es darum geht, über die ClientID auf das Control zuzugreifen.

Mir ist das im u.g. Codeschnippsel zum Thema Custom Validation einer CheckBox passiert. Mit "document.all" hat sich zwar der IE zufrieden gegeben, im FF hingegen hat die entsprechende Codezeile nicht funktioniert. Anders mit "$get". Diese Syntax verstehen beide Browser.

 <asp:CheckBox 
     ID="cbxTermsLoggedIn" 
     runat="server" 
     ValidationGroup="grpvalB2BLoggedInRegistration" /> 

<script language="javascript" type="text/javascript"> 
    function ClientValidationCbxTermsLoggedIn(source, args) 
    { 
        //use:
        var cbx = $get('<%=cbxTermsLoggedIn.ClientID %>');
        args.IsValid = cbx.checked;

        //instead of:
        //args.IsValid = document.all["<%=cbxTermsLoggedIn.ClientID %>"].checked; 
    } 
 </script>

<asp:CustomValidator 
    ID="cstmvalB2BRegistrationTermsLoggedIn" 
    runat="server" 
    SetFocusOnError="true" 
    Display="Dynamic" 
    ErrorMessage="Sie müssen der Speicherung zustimmen"
    ClientValidationFunction="ClientValidationCbxTermsLoggedIn" 
    ValidationGroup="grpvalB2BLoggedInRegistration"
    ValidateEmptyText="True" />

Tags:
Jan 14
2009

Das GridView Servercontrol von ASP.NET 2.0 bietet eine Vielzahl von Möglichkeiten, Spalten mit Informationen zu versehen. Gelegentlich ist es notwendig, eine Spalte mit einer Checkbox zu versehen, um Zeilen einzeln wählen zu können. Das ist schnell implementiert. Allerdings wird es etwas tricky, wenn nur jeweils eine Checkbox aktiviert sein darf, also vergleichbar mit einer Reihe von RadioButtons.
Mit etwas JavaScript ist dieser UseCase jedoch auch problemlos umsetzbar.

So könnte die Spalte im GridView aussehen, in dem es beispielweise nur einen Hauptansprechpartner geben darf:

Hier die CheckBox Deklaration im GridView: 

<asp:TemplateField HeaderText="Haupt AP">
  <ItemTemplate>
    <asp:CheckBox
      ID="cbxIsMainUser"
      runat="server"
      CssClass="cbxCheckbox" /> 
  </ItemTemplate>
</asp:TemplateField>

Hier das JavaScript im aspx-Code:

<script type="text/javascript" language="javascript">
  function uncheckOthers(id)
  {
    var elm = document.getElementsByTagName('input'); for(var i = 0; i < elm.length; i++)
    {
      if(elm.item(i).id.substring(id.id.lastIndexOf('_')) == id.id.substring(id.id.lastIndexOf('_'))) 
      {
        if( elm.item(i).type == "checkbox" && elm.item(i)!=id)elm.item(i).checked =
false;
      }
    }
  }
</script>

RowDataBound des GridView im Codebehind:

//allow only one checkbox in column to be checked using javascript:
CheckBox cbxIsMainUser = (CheckBox)e.Row.FindControl("cbxIsMainUser");
string strScript = "uncheckOthers(" + cbxIsMainUser.ClientID + ");";
cbxIsMainUser.Attributes.Add("onclick", strScript);

Tags:
Sep 08
2008

Nach dem Update meines Firefox-Browsers auf die aktuelle 3er Version mußte ich überrascht feststellen, dass die kleine Silverlight 1.0 Applikation auf meiner Website nicht mehr funktionierte. Stattdessen bot mir der Browser das "Get Microsoft Silverlight" Logo an. Auch eine erneute Installation des Plugins in den Versionen 1 und 2 brachte keine Änderung des Verhaltens.

 

Im Netz bin ich in diversen Foren, Blogs und Newsseiten auf den Hinweis gestoßen, dass ein Konflikt mit der Datei "silverlight.js" vorliegt (Info auf Entwickler.com, Info von Tim Heuer). Demnach muss die bisherige "silverlight.js" durch die Version aus dem Microsoft Silverlight Software Developement Kit Beta 2 ersetzt werden und damit sollten die Probleme im FF 3 behoben sein. Nun gut, wenn dass die Lösung bietet, dann ist es den Download des SDK mit ca. 55 MB schon mal wert.

Das File sollte sich nach der Installation des SDK in folgendem Ordner befinden:

 

Die aktuelle Scriptdatei hat einen fast doppelt so großen Dateiumfang, was auf etliche Erweiterungen hinweist.

Ein Versuch hat gezeigt, dass der Tausch des JavaScript Files tatsächlich die Silverlight Applikation wieder zum Leben erweckt.

Tags: Tags: