Kuvatud on postitused sildiga JavaScript. Kuva kõik postitused
Kuvatud on postitused sildiga JavaScript. Kuva kõik postitused

reede, 6. august 2010

VisualStudio 2010 debugeri käima ajamine JavaScripti jaoks IE8-ga

Kui mingil põhjusel ei debugi JavaScripti VisualStudio 2010 all ja oled kontrollinud
,et nii IE8 seadetest Options -> Advanced -> Browsing -> märkeruut "Disable Script debugging" on maha võetud ja VisualStudio2010 Solution Property Pages -> Start Options on degugimine märgitud nii nagu vaja aga ikka keeldub JavaScripti silumast võib abi olla sõna
"debugger" kirjutamisest otse JavaScripti koodi no näiteks nii

function onSucceed(result, userContext, methodname) {
debugger;
if (KOnimet != null) {
KOnimet.value = result;
}
else {
if (result.length > 0) {
alert(result);
}
}
}

kolmapäev, 28. oktoober 2009

Ära näita sirviku JavaScriptile küpsiseid

kui sul seda vaja ei ole, ehk lisa web.config faili rida httpOnlyCookies="true"
saad murdskriptimise vastu võidelda, sirviku Javascript ei pääse enam küpsisele ligi (sõltub sirvikust ja selle versioonist)
ja kui vaja ka et küpsised läheksid läbi SSL-i võid panna ka selle jupi juurde
requireSSL="true"


kolmapäev, 29. juuli 2009

Sys.Net.WebRequest klassiga kliendi sertifikaadi küsimine kasutades Request.ClientCertificate meetodit

Vaja lisada andmete sisestusvormile nupp, millega saab osa vormil nõutavaid andmeid lugeda ID-kaardi pealt, kuid nii, et vormi teistele väljadele sisestatud info jääks peale ID-kaardilt andmete lugemist alles(ei tee tervele lehele Postbacki). See asi on võimalik lahendada .NET 3.5 AJAX-i Sys.Net.WebRequest klassi kasutades

Vorm näiteks selline, kus isikukoodi, ees- ja perekonnanime võib lugeda ID-kaardi pealt ja muu info tuleb käsitsi sisestada



ID-kaardilt saame andmed kätte tehes algselt lehelt WebRequest.invoke() GET requesti päringu lehele Idkaart.aspx, kus Request.ClientCertificate meetodiga loeme
ID-kaardilt andmed ja saadame nad tagasi püstkriipsuga eraldatud stringijadana Response.Write("Isikukood|Perekonnanimi|Eesnimi");
IIS-i poolt tuleb Idkaart.aspx lehel peale seada, et Accept Client certificate, siis pöördumisel
Idkaart.aspx poole küsitakse kliendi sertifikaati, ehk ID-kaardi puhul tuleb PIN1 sisestada

NB! Kui kasutatakse Sertifitseerimiskeskuse serte, siis nii JUUR-SK kui ka KLASS3-SK serdid peavad olema õieti paigaldatud, vastasel juhul Request.ClientCertificate ei pruugi tööle hakata

Idkaart.aspx lehe sisu selline, sealt loeme ID-kaardi andmed

public partial class IdKaart : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string inf="";
try
{
//küsime kliendi sertifikaati
HttpClientCertificate sert = Request.ClientCertificate;
if (sert.IsPresent) //kui sertifikaat on olemas
{
if (System.DateTime.Now < sert.ValidUntil) //kas kehtib veel
{
String unparsed = sert.Subject;
System.Text.RegularExpressions.Regex re = new Regex("SERIALNUMBER=(\\d{11})");
if (re.IsMatch(unparsed))
{
if (re.Match(unparsed).Groups[1].Value.Length == 11) //isikukood peab olema 11 sümbolit pikk
{
inf = re.Match(unparsed).Groups[1].Value + "|"; //isikukood
}
}
System.Text.RegularExpressions.Regex rename = new Regex("SN=(.*?),\\s+G=(.*?),");
if (rename.IsMatch(unparsed))
{
inf += rename.Match(unparsed).Groups[1].Value+"|"; //perekonnanimi
inf += rename.Match(unparsed).Groups[2].Value; //eesnimi
}
}
}
}
catch (SystemException ex)
{ }
//tagastame eraldatud stringijada isikukood|perekonnanimi|eesnimi
Response.Clear();
Response.BufferOutput = false;
Response.ContentType = "text/plain";
Response.ContentEncoding = System.Text.ASCIIEncoding.Default;
Response.Write(inf);
Response.End();
}
}

leht XMLHttpParing.aspx, kus andmeid küsime näeb välja selline, kasutada tuleb Javaskripti, mis WebRequest.invoke() meetodiga pöördub lehelt IdKaart.aspx andmeid lugema ja kui on sealt
andmed kätte saanud, siis täidab osad sisestusväljad ära ja keelab nende edasise kasutamine


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="XMLHttpParing.aspx.cs" Inherits="ASP_DEMO.XMLHttpParing" %>

<!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 runat="server">
<title>XMLHttpPäring</title>
<script type="text/javascript">
var xmlreq;
function pagLoad() {
try {
var webRequest = new Sys.Net.WebRequest();
webRequest.set_url("IdKaart.aspx");
webRequest.set_httpVerb("GET");
webRequest.add_completed(completedHandler);
webRequest.invoke();
}
catch (err)
{ }
}
function completedHandler(result, eventArgs) {
if (result.get_responseAvailable()) {
var vastus = new Array();
vastus = result.get_responseData().split("|");
if (vastus.length == 3) {
var nimi = document.getElementById("<%= TextBoxPerenimi.ClientID %>");
nimi.value = vastus[1];
nimi.disabled = true; //kui tuleb andmeid ID-kaardilt, siis keelab edasise tekstivälja muutmise ära
nimi = document.getElementById("<%= TextBoxEesnimi.ClientID %>");
nimi.value = vastus[2];
nimi.disabled = true;
nimi = document.getElementById("<%= TextBoxIsikukood.ClientID %>");
nimi.value = vastus[0];
nimi.disabled = true;
nimi = document.getElementById("<%= ButtonIdkaart.ClientID %>");
nimi.disabled = true;
}
}
}
</script>

</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel runat="server" ID="UpdatePanel1">
<ContentTemplate>
<table>
<tr>
<td>Isikukood&nbsp;<asp:TextBox ID="TextBoxIsikukood" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>Perekonnanimi&nbsp;<asp:TextBox ID="TextBoxPerenimi" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>Eesnimi&nbsp;<asp:TextBox ID="TextBoxEesnimi" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td style="width:200px">Muu info(tekst, mis ID kaardilt andmete küsimise järel jääb vormile alles<asp:TextBox ID="TextBoxMuu" MaxLength="400" Rows="4" Columns="70"
runat="server" TextMode="MultiLine"></asp:TextBox>
</td>
</tr>
</table>
<div>
<asp:Button ID="ButtonIdkaart" CausesValidation="false" runat="server"
Text="Loe andmed ID-kaardilt" />
<asp:Button ID="ButtonEdasi" runat="server" Text="Edasi" />
</div>
</ContentTemplate>
</asp:UpdatePanel>

</form>
</body>
</html>


code-behind XMLHttpParing.aspx lehele
public partial class XMLHttpParing : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//paneme kliendi poolse javascripti külge, tuleb kasutada return pagLoad(),
// kui ainult pagLoad() onClick eventile külge panna, teeb leht Postbacki ja
// webRequest.invoke()-iga loetud andmed korra vilksatavad ekraanil ja siis kaovad
this.ButtonIdkaart.Attributes.Add("onClick", "return pagLoad()");
}

}





pagLoad() on see isetehtud Javaskripti funktsioon, mille välja kutsume ja mis selle AJAX-I XMLHttpRequest päringu ära teeb.
function completedHandler() on see Javaskripti funktsioon, mis IdKaart.aspx lehelt info vastu võtab, töötleb ja kontrollib neid ning viib saadud andmed vormile.

Pikemalt on Windowsi Certificate Services Client-ist mille kaudu ID-kaardi majandmine
käib juttu siin.

http://technet.microsoft.com/en-us/library/cc700848.aspx




Blogged with the Flock Browser

reede, 8. mai 2009

Javascripti alert aken UpdatePaneli sees

Kui peale mingit toimingut vaja näidata ekraanil JavaScripti kinnitusakent aga lehel kasutame UpdatePanel-it siis selle UpdatePaneli sees
JavaScript alert käib niimoodi

String scriptString ="";
string alertText = "Reaalsus on kestev illusioon";
// siin script language=""javascript"" on oluline
scriptString = @"<script language=""javascript""> alert('" + alertText + "');</script>";
if (!this.Page.ClientScript.IsClientScriptBlockRegistered("clientScript"))
{
//kuna oleme updatepaneli sees, tuleb seda ScriptManager.RegisterStartupScript meetodit kasutada
ScriptManager.RegisterStartupScript(this,this.GetType(), "clientScript", scriptString, false);
}
Blogged with the Flock Browser

reede, 22. august 2008

ASP.NET automaatne veebilehelt tagasi suunamine

Kui on vaja teha selline asi, et oled ühe veebilehe peal ja pead vahepeal teise veebilehe peal käima, et sealt lehelt mingeid andmeid teada saada ja siis automaatselt samale lehele tagasi tulla koos loetud andmetega saab kasutada järgmist lahendust:

Ehk meil on vaja teha järgmine lähenemine
loginTenant.aspx => EstIdCard.aspx(sellelt lehelt saadud andmed saadame tagasi) => loginTenant.aspx


loginTenant.aspx veebilehel

<%--teeme strongly referenced type EstIdCard.aspx veebilehle, et sealt public properteid lugeda--%>
<%@ PreviousPageType VirtualPath="~/EstIdCard.aspx" %>

<asp:Label ID="Label2" runat="server"></asp:Label>

<%--selle nupu ButtonIDTest vajutus käivitab operatsiooni--%>
<asp:Button ID="ButtonIDTest" runat="server" CausesValidation="False"
Text="ButtonTest" PostBackUrl="~/EstIdCard.aspx" />


loginTenant.cs code-behind
protected void Page_Load(object sender, EventArgs e)
{
if ((Page.PreviousPage != null) && PreviousPage.IsCrossPagePostBack)
{
//saame eelmiselt lehelt andmed kätte
this.Label2.Text += PreviousPage.idcode;
}
else
{
this.Label2.Text = "ei õnnestunud";
}
}

EstIdCard.aspx veebileht, siia kirjutame nüüd jupi javascripti, et teha automaatne tagasisuunamine, kasutame asp:Button PostbackUrl-i et loginTenant.aspx lehel saaksime kindlad olla, et toimub tagasisuunamine.
Siin peab just olemas, see PostBackUrl, et
see osa töötaks: if ((Page.PreviousPage != null) && PreviousPage.IsCrossPagePostBack)
Lihtsalt Response.Redirect kasutada ei saa.

See javascriptis tehtud funktsioon ExecuteClick irriteerib nupu vajutust

<script language="javascript" type="text/javascript">
<!--
function ExecuteClick() {
document.getElementById("<%=ButtonTagasi.ClientID %>").click();
}
-->
</script>
<asp:Button ID="ButtonTagasi" runat="server" CausesValidation="False"
PostBackUrl="~/loginTenant.aspx" Text="Click to continue..." />

EstIdCard.cs

public property, selleks, et saaks andmeid edastada

public string idcode
{
set { this.ViewState["isikukood"] = value; }
get
{
if (this.ViewState["isikukood"] == null)
return "";
else
return this.ViewState["isikukood"].ToString();
}
}


protected void Page_Load(object sender, EventArgs e)
{
idcode = "IDnumbriväärtus"; // väärtustame public propery
//lisame nupule automaatseks tagasisuunamiseks javascripti jupi
this.ButtonTagasi.Attributes.Add("onFocus", "ExecuteClick()");

}

protected void Page_PreRender(object sender, EventArgs e)
{
//siin nüüd sätime nupule fookuse, ehk käivitame varem tehtud funktsiooni Javascriptis ExecuteClick, mis teeb cross-page postbacki tagasi algsele loginTenant.aspx lehele
this.ButtonTagasi.Focus();
}


Blogged with the Flock Browser