Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
Web User Control etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Web User Control etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Ağustos 2011 Perşembe

WebPart oluşturmanın MSDN örneği

Elimizin altında bulunsun
<!-- A user control that implements an interface. -->
<%@ Control language="C#" ClassName="CalendarUserControl" %>
<%@ implements
interface="System.Web.UI.WebControls.WebParts.IWebPart" %>

<script runat="server">

private string m_Description;
private string m_Title;
private string m_TitleIconImageUrl;
private string m_TitleUrl;
private string m_CatalogIconImageUrl;

[Personalizable]
public string Description
{
get
{
object objTitle = ViewState["Description"];
if (objTitle == null)
return String.Empty;

return (string)objTitle;
}
set
{
ViewState["Description"] = Server.HtmlEncode(value);
}
}

[Personalizable]
public string Title
{
get
{
object objTitle = ViewState["Title"];
if (objTitle == null)
return String.Empty;

return (string)objTitle;
}
set
{
ViewState["Title"] = Server.HtmlEncode(value);
}
}

public string Subtitle
{
get
{
object objSubTitle = ViewState["Subtitle"];
if (objSubTitle == null)
return "Acme Corp";
return (string)objSubTitle;
}

}

[Personalizable]
public string TitleIconImageUrl
{
get
{
object objTitle = ViewState["TitleIconImageUrl"];
if (objTitle == null)
return String.Empty;

return (string)objTitle;
}
set
{
ViewState["TitleIconImageUrl"] = Server.HtmlEncode(value);
}
}

[Personalizable]
public string TitleUrl
{
get
{
object objTitle = ViewState["TitleUrl"];
if (objTitle == null)
return String.Empty;

return (string)objTitle;
}
set
{
ViewState["TitleUrl"] = Server.HtmlEncode(value);
}
}

[Personalizable]
public string CatalogIconImageUrl
{
get
{
object objTitle = ViewState["CatalogIconImageUrl"];
if (objTitle == null)
return String.Empty;

return (string)objTitle;
}
set
{
ViewState["CatalogIconImageUrl"] = Server.HtmlEncode(value);
}
}

</script>
<asp:calendar id="Calendar1" runat="server" />


<!-- A page that registers and hosts the user control. -->
<%@ Page language="C#" %>
<%@ register tagprefix="uc1"
tagname="CalControl"
src="~/CalendarUserControl.ascx" %>

<!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>Calendar Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:webpartmanager id="manager1" runat="server" />
<asp:webpartzone id="WebPartZone1" runat="server">
<zonetemplate>
<uc1:CalControl id="CalControl1" runat="server"
title="Personal Calendar"
description="My personal calendar for work." />
</zonetemplate>
</asp:webpartzone>
</form>
</body>
</html>

Web User Control 'den Web Servisi çağırmak

Bir önceki makalemde bir web servisinden dll ler oluşturma ve bunu GAC'a yüklemeden bahsetmiştim.

Şimdi GAC'daki bu DLL'i kullanarak bir web user control içinden, code behind olmadan .ascx dosyasından nasıl bu servise erişirizi yazayım.

WUC'da .ascx dosyasında tüketmek istiyorum çünkü bu dosyayı daha sonra derlemek istemiyorum.


Kısa ve özet haliyle:
<%@ Control Language="C#" ClassName="wuc" %>
<%@ Import Namespace="System.Reflection" %>


<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();
// deneme.dll 'imiz GAC'a yüklü ve çekiyoruz
object obj = Activator.CreateInstance("deneme, Version=0.0.0.0, Culture=neutral, PublicKeyToken=dc5cbb4d7c01cc5e", "Service1").Unwrap();
Type tip = obj.GetType();
MethodInfo miTopla = tip.GetMethod("HelloWorld");

btn.Text = miTopla.Invoke(obj, null).ToString();
}
</script>

<asp:Button runat="server" ID="btn" Text="asdasd" />


işte daha detaylandırdığım ascx in codu:

<%@ Control Language="C#" ClassName="WebUserControl" %>
<%@ Import Namespace="System.Reflection" %>
<script runat="server">

public class GenerateObject
{
public enum WebServicesClass
{
HastaRaporlariServisi, Yardimci
}
const string sAsmNameHastaRaporlari = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sHastaRaporlariServisi = "HastaRaporlariServisi";
const string sAsmNameYardimci = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sYardimciServisi = "YardimciServisi";

public static object CreateInstance(WebServicesClass _wsc)
{
try
{
switch (_wsc)
{
case WebServicesClass.HastaRaporlariServisi:
return Activator.CreateInstance(sAsmNameHastaRaporlari, sHastaRaporlariServisi).Unwrap();
case WebServicesClass.Yardimci:
return Activator.CreateInstance(sAsmNameYardimci, sYardimciServisi).Unwrap();
default:
return null;
}
}
catch (Exception ex)
{
throw;
}
}

public static MethodInfo GetMethod(object _obj, string _sMethodName)
{
try
{
Type tip = _obj.GetType();
MethodInfo mi = tip.GetMethod(_sMethodName);
return mi;
}
catch (Exception ex)
{
throw;
}
}

public static object Invoke(object _obj, string _sMethodName, params object[] _params)
{
object result = GenerateObject.GetMethod(_obj, _sMethodName).Invoke(_obj, _params);
return result;
}


public static object Invoke(WebServicesClass _wsc, string _sMethodName, params object[] _params)
{
object instance = GenerateObject.CreateInstance(_wsc);
object result = GenerateObject.GetMethod(instance, _sMethodName).Invoke(instance, _params);
return result;
}

}
protected override void CreateChildControls()
{
base.CreateChildControls();

btn.Text = GenerateObject.Invoke(GenerateObject.WebServicesClass.HastaRaporlariServisi,"tistring",null).ToString();
}
</script>
<asp:Button runat="server" ID="btn" Text="asdasd" />

Yukarıdaki uzun kodu değişmeyecek olan GenerateObject sınıfını bir .inc dosyasına koyarak ascx'e çekmek isterseniz şu şekilde olacaktır:
<script runat="server">

public class GenerateObject
{
public enum WebServicesClass
{
HastaRaporlariServisi, Yardimci
}
const string sAsmNameHastaRaporlari = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sHastaRaporlariServisi = "HastaRaporlariServisi";
const string sAsmNameYardimci = "HastaRaporlari, Version=0.0.0.0, Culture=neutral, PublicKeyToken=0b0b7e799bda4cb2";
const string sYardimciServisi = "YardimciServisi";

public static object CreateInstance(WebServicesClass _wsc)
{
try
{
switch (_wsc)
{
case WebServicesClass.HastaRaporlariServisi:
return Activator.CreateInstance(sAsmNameHastaRaporlari, sHastaRaporlariServisi).Unwrap();
case WebServicesClass.Yardimci:
return Activator.CreateInstance(sAsmNameYardimci, sYardimciServisi).Unwrap();
default:
return null;
}
}
catch (Exception ex)
{
throw;
}
}

public static MethodInfo GetMethod(object _obj, string _sMethodName)
{
try
{
Type tip = _obj.GetType();
MethodInfo mi = tip.GetMethod(_sMethodName);
return mi;
}
catch (Exception ex)
{
throw;
}
}

public static object Invoke(object _obj, string _sMethodName, params object[] _params)
{
object result = GetMethod(_obj, _sMethodName).Invoke(_obj, _params);
return result;
}


public static object Invoke(WebServicesClass _wsc, string _sMethodName, params object[] _params)
{
object instance = CreateInstance(_wsc);
object result = GetMethod(instance, _sMethodName).Invoke(instance, _params);
return result;
}

}
</script>

Bu durumda ascx dosyamızda:
<%@ Control Language="C#" ClassName="WebUserControl" %>
<%@ Import Namespace="System.Reflection" %>
<%@ Import Namespace="FMC.Google.Chart.Visualization" %>

<!-- #include virtual="Generator.inc" -->

<script runat="server">
protected override void CreateChildControls()
{
base.CreateChildControls();

btn.Text = GenerateObject.Invoke(GenerateObject.WebServicesClass.HastaRaporlariServisi, "tistring", null).ToString();
}
</script>


GenerateObject sınıfı ile daha hızlı bir şekilde metod çağrısı yapabiliyorum.

Bu ascx dosyasını kullanacağım Default.aspx dosyam:
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<%@ Register src="WebUserControl.ascx" tagname="WebUserControl" tagprefix="uc1" %>

<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>

<uc1:WebUserControl ID="WebUserControl1" runat="server" />

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