Tuesday, June 16, 2009

Call webservice from JavaScript from Master Content Page

You can call web service from JavaScript & display result on page asynchronously from Master Content Page.

Ex:In this example we are getting charges for particulars on the basis of diffrent specification as Consignor City,Consignee City,Weight, Risk Charge, DocType etc.

ChargeCalculation.aspx
<%@ Page Language="C#" MasterPageFile="~/MainMaster.master" AutoEventWireup="true" CodeFile="ChargeCalculation.aspx.cs" Inherits="Testing_ChargeCalculation" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">

<script>
function CallService(arguments) // Send All argument in string with seprator
{
var concity=document.getElementById("ctl00_ContentPlaceHolder1_ddlConCity");
var cnecity=document.getElementById("ctl00_ContentPlaceHolder1_ddlCneCity");
var concityName=concity.options[concity.selectedIndex].text;
var cnecityName=cnecity.options[cnecity.selectedIndex].text;
var riskvalue=document.getElementById("<%=TxtConignmentValue.ClientID%>").value;
var weight= document.getElementById("<%=TxtWeight.ClientID%>").value;

var arguments =concityName+"_"+cnecityName+"_"+riskvalue+"_"+weight+"_"+"_D"+"_D";
MyPro.MyWebService.GetCharges(arguments,DisplayResult);
}

function DisplayResult(result)
{
var doc;
try
{
if (window.ActiveXObject) //this is for IE
{
doc=new ActiveXObject("Microsoft.XMLDOM");
doc.async="false";
doc.loadXML(result);
}
else // This is For Mozila
{
var parser=new DOMParser();
var doc=parser.parseFromString(result,"text/xml");

}
//The parser will parse the result content as xml tags from "result" string
//then we can get elements by tag name from XML. Like following.

document.getElementById("<%=LblRiskCharge.ClientID%>")
.innerHTML=doc.getElementsByTagName("HeavyCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblHeavyCharge.ClientID%>")
.innerHTML=doc.getElementsByTagName("RiskCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblService.ClientID%>")
.innerHTML=doc.getElementsByTagName("ServiceCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblFuel.ClientID %>")
.innerHTML=doc.getElementsByTagName("FuelCharge")[0].childNodes[0].nodeValue;

document.getElementById("<%=LblTotalCharge.ClientID %>")
.innerHTML=doc.getElementsByTagName("TotalAmount")[0].childNodes[0].nodeValue;

}
<\script>
<asp:Content>


MyWebService.asmx.cs //code file of web service

namespace MyPro
{
[WebService(Namespace = "MyPro")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService] // This should be placed for script access
public class MyWebService : System.Web.Services.WebService
{

[WebMethod]
[ScriptMethod]
public string GetCharges(string parameters)
{
char[] spilter = new char[] { '_' };
string[] args = parameters.Split(spilter);
string conCity=args[0]; // Send
string cneCity=args[1]; // arguments
string riskvalue = args[2]; // as u need
string weight = args[3]; // But remember
string docType = args[4]; // indexes of
string region = args[5]; // Items


Rates rs = new Rates();// Class for Rate Calculation & Charges Methods
DataSet DsCharges=rs.GetCharges(conCity,cneCity,riskvalue,weight,docType,region)

return DsCharges.GetXml();

}
}