Sunday, 22 April 2012

call asp.net page methods from javascript


 Mark your method as static and give it the WebMethod attribute
The method has to be declared static. It must also be marked with the WebMethod attribute. You'll probably find that you need to include System.Web.Services
using System.Web.Services;
[WebMethod]
public static string MyMethod(string name)
{
    return "Hello " + name;
}

Client Side


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %>

<!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 language="javascript" type="text/javascript">
         function OnRequestComplete(result, userContext, methodName) {
             alert(result);

         }
         function OnRequestError(error, userContext, methodName) {
             if (error != null) {
                 alert(error.get_message());
             }
         }
         function SubmitData() {

             PageMethods. MyMethod ("Test",OnRequestComplete, OnRequestError);
         }
  
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
  
      <asp:ScriptManager ID="ScriptManager1" EnablePageMethods="true" EnablePartialRendering="true" runat="server" />
       <input type="button" value="Submit" onclick="SubmitData()" />
    </div>
    </form>
</body>
</html>


Mark your method as static  and EnablePageMethods=true are very important.

If you miss static keyword, it will show error like "Microsoft JScript runtime error : Page method is undefined"


Call Server Side function using jquery

  [WebMethod]
    public static string DisplayData(string name,int id)
    {
        return "name:" + name  + " Id: " + id;
    }

Client side


<!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>JQuery Call asp.net page methods</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "Default.aspx/DisplayData",
            data: '{"name":"test","id":"1"}',
            dataType: "json",
            success: function (data) {
                $("#lbltxt").text(data.d);
            },
            error: function (result) {
                alert("Error");
            }
        });
    });
</script>
</head>
<body>
<form id="form1" runat="server">
<label id="lbltxt" runat="server"></label>
</form>
</body>
</html>





Thursday, 19 April 2012

show alert message from server side using javascript


VB

Page.ClientScript.RegisterStartupScript(Me.GetType(), "showalert", alert('Only alert Message');__doPostBack('__Page', '');", True)


C#
this.Page.ClientScript.
RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString() , "alert('" + ex.Message + "');__doPostBack('__Page', 'EmptyPostback');", true);

__doPostBack('__Page', 'EmptyPostback'); is used to avoid alert message while click on browser back button.

When we register the client script with the alert, immediately follow the alert statement with one which will refresh the page. This ensures that the client script is removed from the page as soon as the OK is clicked, and if the user returns to the page the alert pop up does not reappear.


Register Javascript when using Update Panel

VB
ScriptManager.RegisterStartupScript(Me, [GetType](), "showalert", "alert('Only alert Message');__doPostBack('__Page', '');", True)
C#

ScriptManager.RegisterStartupScript(Page, Page.GetType(), Guid.NewGuid().ToString(),"alert('I am from the Server');__doPostBack('__Page', '');", true);

Error Handling in SQL Server


BEGIN TRY
      select 1/0
END TRY
BEGIN CATCH
    DECLARE @ErrorMessage NVARCHAR(4000);
    DECLARE @ErrorSeverity INT;
    DECLARE @ErrorState INT;

    SELECT
        @ErrorMessage = ERROR_MESSAGE(),
        @ErrorSeverity = ERROR_SEVERITY(),
        @ErrorState = ERROR_STATE();
    RAISERROR (@ErrorMessage, -- Message text.
               @ErrorSeverity, -- Severity.
               @ErrorState -- State.
               );
END CATCH;

Wednesday, 18 April 2012

Set max length for multiline textbox



Jquery Common Function:

setMaxLengh: function (id, len, msg) {

      if ($('#' + id).length == 0) return;

      if ($('#' + msg).length > 0) $('#' + msg).html(len + " Characters left");


      $('#' + id).keypress(function (e) {
          if ($(this).val().length >= len) {
              e.preventDefault();
          }
      });

      $('#' + id).keyup(function (e) {
          var total = parseInt($(this).val().length);

          if ($('#' + msg).length > 0) $("#" + msg).html('Characters entered <b>' + total + '</b> out of ' + len + '.');

          if (total >= len) $(this).val($(this).val().substring(0, len));
      });
  }

(or)

Javascript:

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>set Max Length</title>
    <script type="text/javascript">
        //To display the number of characters left
        function CharactersCount() {
            var CharLength = '<%=txtMsg.MaxLength %>';
            var txtMsg = document.getElementById('txtMsg');
            var lblCount = document.getElementById('lblCount');          
            if (txtMsg.value.length > CharLength) {
                txtMsg.value = txtMsg.value.substring(0, CharLength);
            }
            lblCount.innerHTML = CharLength - txtMsg.value.length;          
        }
    </script>
    <style type="text/css">
.lblstyle
{
color:Red;
font-weight:bold
font-size11px;
font-familyverdana;
}
</style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
             
                <td>
                    <span style="font-family: Verdana; font-size: 12px">Left:</span>
                    <asp:Label ID="lblCount" runat="server" Text="100" CssClass="lblstyle"></asp:Label>
                </td>
            </tr>
          
            <tr>
                <td colspan="2">
                    <asp:TextBox ID="txtMsg" onkeyup="CharactersCount();" runat="server"
                        Style="overflow: hidden;" Height="80px" TextMode="MultiLine" Width="300px" MaxLength="100" />
                </td>
            </tr>
        </table>
    </div>
    </form>
</body>
</html>



disable resizing a multi line text box



<style type="text/css">
    textarea {resize:none;}
</style>

Or

<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" style="resize:none;"></asp:TextBox>




Tuesday, 17 April 2012

asp:Menu rendering problems in IE8, Safari and Chrome

I was caught off-gaurd today when a user of one my applications reported that the asp:Menu was not rendering properly in her IE browser. I checked the version and it was IE8. I changed the application to compatibility view and the menu rendered just fine.
Since I cannot tell each and every user to view the app in compatibility view when in IE8, i started digging for solutions. It looked like a z-index problem to start with. The problem was that since the new IE8 is moving closer to standards, the z-index value was set to "auto" when not specified. I tried changing it something bigger than its container's z-index value woo-hoo...it worked.
I just added this line in the CSS class definition:

z-index : 100/* Setting z-index because of an IE8 bug */
Since it is a bug, there are some hotfixes available from MS here.
This problem prompted me to look for rendering in Chrome and Safari also.
The asp:Menu control looks horrible in Chrome. There are no popups, just plain static text. I stumbled upon this thread which discusses this problem. I did not use the method posted in that thread, instead, I used a solution posted by user Mark Perkins which to me looked like the simplest and cleanest solution. Here is what he posted:
Put this piece of code in your Master page code file:
// Adding this override so that the asp:Menu control renders properly in Safari and Chrome
    protected override void AddedControl(Control control, int index)
    {
        if (Request.ServerVariables["http_user_agent"].IndexOf("Safari"StringComparison.CurrentCultureIgnoreCase) != -1)
        {
            this.Page.ClientTarget = "uplevel";
        }
        base.AddedControl(control, index);
    }

Monday, 16 April 2012

SQL - CASE in a WHERE clause

Case statement in where clause

  1. SELECT T2.*, T1.*
  2.      FROM T1, T2
  3.    WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND
  4.                      T1.SOME_TYPE LIKE 'NOTHING%'
  5.                 THEN 1
  6.                 WHEN T2.COMPARE_TYPE != 'A' AND
  7.                      T1.SOME_TYPE NOT LIKE 'NOTHING%' 
  8.                   THEN 1
  9.                ELSE 0
  10.           END) = 1

    Result

    C        SEQ SOME_TYPE
    - ---------- -----------
    A          1 NOTHING 1
    A          2 NOTHING 2
    B          3 SOMETHING 1
    B          4 SOMETHING 2
    B          5 SOMETHING 3
    B          6 SOMETHING 4