# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > مقالات مرتبط با Microsoft .Net Framework >  پرسش های متداول برنامه نویسان ASP.NET

## Behrouz_Rad

*در این تاپیک ، سعی در پاسخ دادن به سوالات متداولی خواهد شد که برنامه نویسان ASP.NET اکثرا با آنها مواجه می شوند.*

-------------------------------------------------------------------------------

1) چرا در صفحات ASP.NET خود، چندین تگ <form> با خاصیت runat=server می بینم؟

پاسخ: ASP.NET را به شکل صحیح نصب نکرده اید.
آن را از حالت نصب خارج و مجددا نصب کنید.

aspnet_regiis.exe –u
aspnet_regiis.exe –i

نکته 1: در Windows 2003 باید از سینتکس زیر استفاده کنید:

aspnet_regiis -i –enable

نکته 2: همیشه قبل از نصب VS.NET باید IIS را نصب کنید.

-------------------------------------------------------------------------------

2) آیا می توانم از طریق کدنویسی، از نسخه ی ASP.NET  نصب شده بر روی سیستم خود اطلاع پیدا کنم؟

پاسخ:

Response.Write(System.Environment.Version.ToString  () )


-------------------------------------------------------------------------------

3) آیا راهی برای کامنت کردن کدهای سمت سرور در صفحات aspx وجود دارد. می خواهم این کدها پس از پردازش صفحه در Source آن نمایش داده نشوند. 

پاسخ:

<%--<asp:Label id="Label1" runat="server">Label</asp:Label>--%>


-------------------------------------------------------------------------------

4) در ASP کلاسیک، از توابع date و time به منظور دریافت تاریخ و زمان جاری سیستم استفاده می کردیم. معادل این توابع در ASP.NET چیست؟

پاسخ:

System.DataTime.Now.ToShortDateString()
System.DateTime.Now.ToShortTimeString()


-------------------------------------------------------------------------------

5) در پروژه ی خود از Validator ها استفاده می کنم. زمانی که بر روی هر دکمه ای بر روی وب فرم خود کلیک می کنم، روال های مربوط به Validator ها فراخوانی می شود.
آیا راهی برای جلوگیری از این مسئله وجود دارد؟

پاسخ:
خاصیت CauseValidation کنترل Button خود را به False تنظیم کنید.

-------------------------------------------------------------------------------

6) آیا راهی برای به دست آوردن آدرس IP  کاربر بازدید کننده از سایت وجود دارد؟

پاسخ:

Response.Write (Request.UserHostAddress.ToString ())

و یا:

Response.Write (Request.ServerVariables("REMOTE_HOST"))


-------------------------------------------------------------------------------

7) همان طور که می دونید ، خطای 404 مربوط به پیدا نشدن یک صفحه از پروژه است.
چگونه می توانم اگر کاربر آدرس صفحه ای را وارد کرد که این صفحه جز وب فرم های من نبود ، یک صفحه ی خطای دلخواه را به آن نشان دهم؟

پاسخ:
در روال Application_Error فایل Global.asax بنویسید:

Dim ex As Exception = Server.GetLastError().GetBaseException()
If TypeOf ex Is System.IO.FileNotFoundException Then
   Response.Redirect("err404.aspx")
End If


-------------------------------------------------------------------------------

8) چه تفاوتی میان کنترل های HTML و کنترل های ASP.NET وجود دارد: 

پاسخ:
به لینک های زیر مراجعه بفرمایید:
http://msdn.microsoft.com/library/de...mscontrols.asp
http://msdn.microsoft.com/library/de...asp?frame=true

-------------------------------------------------------------------------------

9) نحوه ی مقایسه ی زمان ها در دات نت به چه شکل است؟

پاسخ:

Dim t1 As String = DateTime.Parse("3:30 PM").ToString("t")
Dim t2 As String = DateTime.Now.ToString("t")
If DateTime.Compare(DateTime.Parse(t1), DateTime.Parse(t2)) < 0 Then
     Response.Write(t1.ToString() & " is < than " & t2.ToString())
Else
     Response.Write(t1.ToString() & " is > than " & t2.ToString())
End If


-------------------------------------------------------------------------------

10) نحوه ی استفاده از کلاس TimeSpan به چه شکل است؟

پاسخ:

Dim adate As DateTime = DateTime.Parse("06/24/2003")
Dim bdate As DateTime = DateTime.Parse("06/28/2003")
Dim ts As New TimeSpan(bdate.Ticks - adate.Ticks)
Response.Write(ts.TotalDays & "<br>")
Response.Write(ts.TotalHours & ":" & ts.TotalMinutes & ":" & ts.TotalSeconds & ":" & ts.TotalMilliseconds)


-------------------------------------------------------------------------------

11) اطلاعات کاملی در مورد کوکی ها می خواستم؟

پاسخ: یک مقاله ی جامع در لینک زیر وجود دارد:
http://msdn.microsoft.com/library/de...cookies101.asp

-------------------------------------------------------------------------------

12) هنگاهی که قصد مشاهده ی صفحات پروژه خود را دارم، با خطای "could not load type" مواجه می شوم!!! 

پاسخ: پروژه ی خود را کامپایل نکرده اید. ای خطا عمدتا بعد از آپلود بر روی هاست رخ می دهد.
همیشه به آخرین نسخه ی فایل DLL حاصل از کامپایل پروژه ی خود در پوشه ی bin نیاز دارید.

-------------------------------------------------------------------------------

13) در یکی از دستورات SQL خود که به منظور بازیابی اطلاعات استفاده می کنم، مقداری زمان صرف می شود. قصد دارم تا در زمان اجرای این Query، کاربر متنی در صفحه متنی را همانند "لطفا چند لحظه صبر کنید..." ببیند. 

پاسخ:
لینک زیر راهنمای شما در این زمینه است:
http://msdn.microsoft.com/msdnmag/is...esignPatterns/

-------------------------------------------------------------------------------

14) اصول کلی تصدیق هویت افراد از طریق Forms Authentication به چه شکل است؟

پاسخ:
برای VB.NET:
http://support.microsoft.com/default...b;EN-US;308157
برای C#‎.NET:
http://support.microsoft.com/default...b;EN-US;301240

-------------------------------------------------------------------------------

15) برای اتصال به پایگاه داده ی MySQL به چه طریق عمل کنم؟

پاسخ:
لینک زیر را ببینید:
http://www.stardeveloper.com/article...3052201&page=1

-------------------------------------------------------------------------------

16) فرق بین خاصیت Src و Codebehind در دایرکتیو Page چیست؟

پاسخ: خاصیت Src مشخص کننده ی فایل Source Code شماست که برای کامپایل پروژه به شیوه ی JIT یا همان Just In Time استفاده می شود.
در این روش، سورس پروژه ی شما نیز باید بر روی سرور قرار بگیرد.
خاصیت Codebehind برای کامپایل پروژه به صورت Pre-Compiling استفاده می شود و در حقیقت کار خاصی را انجام نمی دهد و تنها مسیر فایل سورس وب فرم شما را مشخص خواهد کرد که در روش Pre-Compiling معنایی ندارد.

-------------------------------------------------------------------------------

17) بر روی وب فرم خود یک Input از نوع Hidden قرار داده ام. چگونه می توانم به مقدار ذخیره شده در آن دسترسی داشته باشم؟

پاسخ: مقدار خاصیت Runat این کنترل را به server تنظیم کنید و با دستور myInputName.Value، مقدار قرار گرفته در آن را بازیابی کنید.

-------------------------------------------------------------------------------

18) هر وب فرمی که ایجاد می کنم ، فایلی با پسوند resx برای آن ایجاد می شود. این فایل چیست؟

پاسخ:
فایلی با قالب XML است که اطلاعاتی در مورد رشته ها و اشیا در خود نگهداری می کند.
اطلاعات بیشتر را در لینک زیر ببینید:
http://msdn.microsoft.com/library/de...FileFormat.asp

-------------------------------------------------------------------------------

19) در یک فایل CSS، فرمتی را برای یکی از کنترل هایم تعیین کرده ام. آیا می توان به طریقه کدنویسی، این کلاس را به کنترل ها نسبت داد. 

پاسخ:
اگر کنترل شما از نوع کنتر های ASP.NET است بله.
تمامی کنترل هایی که از کلاس Control مشتق می شوند دارای خاصیتی با نام CssClass هستند که نام کلاس را برای کنترل می پذیرد:

-------------------------------------------------------------------------------

20) URL من با همراه با Query String هاست. روش استانداردی برای استخراج تنها URL اصلی وجود دارد؟

پاسخ:

Dim stringUri As String = "http://www.mySite.com/?id=1&color=red"
Dim weburi As Uri = New Uri(stringUri)
Dim query As String = weburi.Query
Dim weburl As String = stringUri.Substring(0, stringUri.Length - query.Length)
Response.Write(weburl)


-------------------------------------------------------------------------------

21) آسانترین و بهترین روش برای به دست آوردن زمان جاری سیستم چیست؟

پاسخ:

Response.Write(DateTime.Now.ToString("hh:mm:ss"))


-------------------------------------------------------------------------------

22) آیا راهی وجود داره که متوجه بشیم کاربر از طریق سایت دیگه ای وارد سایت ما شده یا خیر؟

پاسخ:

Response.Write ( Request.UrlReferrer.ToString())


-------------------------------------------------------------------------------

23) عمل Sign Out یا خروج از سایت چگونه انجام می گیرد؟

پاسخ:
در روش تصدیق هویت Forms Authentication، با فراخوانی متد SignOut کلاس FormsAuthentication، کوکی ایجاد شده توسط شما بر روی سستم کاربر از بین خواهد رفت.

FormsAuthentication.SignOut()


-------------------------------------------------------------------------------

24) اشکال دستور زیر چیست؟ با اجرای این دستور، صفحه ای سفید ظاهر می شود. 

Server.Transfer("page1.htm")


پاسخ:
متد Transfer کلاس Server تنها به منظور هدایت کاربر به صفحات ASP.NET استفاده می شود.
مجاز به ذکر نام یک فایل HTML نیستید.

-------------------------------------------------------------------------------

25) آیا راهی برای به دست آوردن زبان سیستم کاربر وجود دارد؟

پاسخ:

Dim sLang As String
sLang = Request.UserLanguages(0)
Response.Write(sLang


-------------------------------------------------------------------------------

26) آیا قادر به خواندن شماره ی سریال هارد سیستم کلاینت هستیم؟!!!

پاسخ:
خیر. تنها اطلاعاتی که از طریق هدرهای HTTP منتقل می شوند شامل اطلاعاتی از سیستم کاربر هستند که شماره ی سریال هارد جزء این دسته از اطلاعات نیست!

-------------------------------------------------------------------------------

27) چه تفاوتی میان آدرس های مطلق (Absolute) و آدرس های نسبی (Relative) وجود دارد؟

پاسخ:
آدرس مطلق به یک آدرس کامل که شامل نوع پروتوکول استفاده شده (http، ftp و ...) همراه با Query String ها و تمامی متعلقات یک آدرس است گفته می شود.
به عنوان مثال، آدرس زیر یک آدرس مطلق است:

http://www.mySite.Com/WebForm1.aspx?id=2&color=red

آدرس نسبی، به منظور مشخص کردن مکان قرارگیری یک عنصر همانند یک تصویر، صفحه، صدا و ... نسبت به مکان جاری استفاده می شود.
مثال:

WebForm1.aspx
/myFolder/mySubFolder/myPage.aspx


-------------------------------------------------------------------------------

28) قصد تبدیل زمان بر حسب میلی ثانیه را به زمان واقعی دارم! 

پاسخ:

Dim ts As TimeSpan = TimeSpan.FromMilliseconds(10000)
Response.Write (ts.ToString())


-------------------------------------------------------------------------------

29) می خواهم مطمئن شوم مقداری که کاربر وارد کرده است، حتما از نوع تاریخ است. 

پاسخ:

Dim blnValid As Boolean = False
Try
     DateTime.Parse(MyString)
     blnValid = True
Catch
     blnValid = False
End Try


-------------------------------------------------------------------------------

30) چگونه می توانم دو مقدار از نوع رشته ای را که شامل دو تاریخ هستند با یکدیگر مقایسه کنم؟

پاسخ:

Dim blnTimeIsOk As Boolean = DateTime.Parse("15:00") < DateTime.Parse("08:00")
Response.Write(blnTimeIsOk)


-------------------------------------------------------------------------------

31) قصد بازیابی URL جاری را دارم. 

پاسخ:

Response.Write(Request.Url.ToString())


-------------------------------------------------------------------------------

32) فرض کنید کاربری مقدار ورودی تاریخ را که به شکل روز/ماه/سال است به صورت "0299" وارد کرده است. چگونه می توانم فرمت این تاریخ را به شکل ماه/روز/سال در بیاورم؟

پاسخ:

Dim dt As DateTime = DateTime.ParseExact("0299", New String() {"My", "M/y"}, Nothing, System.Globalization.DateTimeStyles.None)


-------------------------------------------------------------------------------

33) آیا امکانش وجود داره که در یک پروژه از چندین زبان دات نت استفاده کرد؟

پاسخ:
خیر! اما فایل های aspx و فایل های ascx می توانند دز یک پروژه دارای زبان های مختلفی باشند.

-------------------------------------------------------------------------------

34) خاصیت validateRequest در دایرکتیو Page به چه معناست؟

پاسخ:
در صورتی که مقدار این خاصیت به True تنظیم شود (به طور پیش فرض True است)، کاربر قادر به ارسال اطلاعاتی که در آنها از کاراکترهای > و < استفاده شده است نیست.
بهتر است که همیشه این خاصیت را به False تنظیم کنید.

-------------------------------------------------------------------------------

35) آیا می توان کنترل File Field که به منظور آپلود فایل بر روی سرور استفاده می شود را به شکلی تنظیم کرد که کاربر مجاز به وارد کردن متنی در آن نباشد و تنها از طریق دکمه ی Browse بتواند فایل را انتخاب کند؟

پاسخ:

<input id="File1" type="file" contenteditable=false />


-------------------------------------------------------------------------------

36) به چه طریقی می توانم عنوان وب فرم (Title) خود را تغییر دهم؟

پاسخ:
یک ID به تگ Title نسبت دهید و خاصیت Runat تگ Title را به Server تنظیم کنید.

<TITLE id="Title1" runat =server ></TITLE>

و سپس:

'General Declaration
Protected WithEvents Title1 As System.Web.UI.HtmlControls.HtmlGenericControl
'In Page_Load
Title1.InnerText ="Page 1"


-------------------------------------------------------------------------------

37) آیا امکان استفاده از کنترل های Visual InterDev در ASP.NET وجود دارد؟

پاسخ:
لینک زیر را ببینید:
http://support.microsoft.com/default...;en-us;Q314775

-------------------------------------------------------------------------------

38) ممکنه در یکی از وب فرم های من خطایی غیر قابل پیش بینی اتفاق بیفته. قصد دارم تا به جای نمایش اون خطا، یک وب فرم سفارشی را نمایش دهم. 

پاسخ:
در فایل Web.Config، خاصیت mode تگ customErrors را به On تنظیم کرده و خاصیت ErrorPage وب فرم خود را به نام صفحه ای که قصد دارید در هنگام وقوع خطا نمایش داده شود تنظیم کنید.

-------------------------------------------------------------------------------

39) نحوه ی صحیح تبدیل مقدار وارد شده در یک TextBox به Integer

پاسخ:

Int32.Parse(TextBox1.Text)


------------------------------------------------------------------------------------------------------------------

40) چگونه با استفاده از یک Validator به کاربر اجازه ی تنها وارد کردن کاراکترهای عددی رو بدم؟

پاسخ:

<asp:TextBox id="txtNumber" Runat="server" />
<asp:RegularExpressionValidator ID="vldNumber" ControlToValidate="txtNumber" Display="Dynamic" ErrorMessage="Not a number" ValidationExpression="(^([0-9]*|\d*\d{1}?\d*)$)" Runat="server">
</asp:RegularExpressionValidator>

----------


## Behrouz_Rad

41) تعدادی رکورد در DataSet دارم. به چه طریق می توانم مقدار یکی از رکوردها را به TextBox نسبت دهم؟ در مورد همن عمل با استفاده از DataReader نیز توضیح دهید. 

پاسخ:

Textbox1.Text= dsData.Tables(0).Rows(0)("myColumn").ToString()

عدد جلوی Rows، اندیس رکورد و myColumn نیز نام فیلد شماست.

برای DataReader

TextBox1.Text = myDataReader("myColumn").ToString()

و یا

TextBox1.Text = myDataReader(0).ToString()

عدد نوشته شده در جلوی myDataReader، اندیس فیلد است.
بهتره که از این روش استفاده کنید. (افزایش سرعت دسترسی به میزان 33 درصد)

------------------------------------------------------------------------------------------------------------------

42) نحوه ی تنظیم تراز متن یک TextBox از طریق کدنویسی به چه شکل است؟

پاسخ:

TextBox1.Style("text-align")="right"


------------------------------------------------------------------------------------------------------------------

43) تعداد زیادی TextBox در وب فرم خود دارم. راه استانداردی برای حذف محتویات همه ی آنها وجود دارد؟

پاسخ:

Dim ctl As Control
For Each ctl In Page.Controls(1).Controls
If TypeOf ctl Is TextBox Then
CType(ctl, TextBox).Text = ""
End If
Next


------------------------------------------------------------------------------------------------------------------

44) یک TextBox که ار نوع کنترل های ASP.NET است بر روی وب فرم خود دارم.
از طریق جاوا اسکریپت قصد بازیابی مقدار درون آن را دارم. 

پاسخ:

<script lang="javascript">
function CheckFunction()
{
if (document.getElementById('<%=TextBox1.ClientID%>')  .value == "")
{
     alert("Please enter a value");
     return;
}
}
</script>

<asp:textbox id="TextBox2" runat="Server"></asp:textbox>
<input type=button id="btn1" onclick="javascript**:CheckFunction();" value="Click">


------------------------------------------------------------------------------------------------------------------

45) نحوه ی ایجاد کنترل ها به صورت پویا (در زمان اجرا) به چه شکل است؟

پاسخ:

<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder>


Dim TextBoxes(5) As TextBox
Dim i As Integer
For i = 0 To 4
     TextBoxes(i) = New TextBox()
     TextBoxes(i).ID = "TextBox" + i
     TextBoxes(i).AutoPostBack = True
     PlaceHolder1.Controls.Add(TextBoxes(i))
Next


------------------------------------------------------------------------------------------------------------------

46) آیا می توان داده های موجود در یک DataSet را در یک فایل XML نوشت؟

پاسخ:

myDataSet.WriteXml(Server.MapPath ("myFile.xml" ) )


------------------------------------------------------------------------------------------------------------------

47) قصد نمایش داده های ذخیره شده در یک فایل XML را در DataGrid دارم. 

پاسخ:

Dim ds As New DataSet()
ds.ReadXml (Server.MapPath ("myFile.xml"))
DataGrid1.DataSource =ds
DataGrid1.DataBind()


------------------------------------------------------------------------------------------------------------------

48) قصد نمایش داده های ذخیره شده در یک فایل XML را در DataGrid با استفاده از کلاس FileStream دارم. 

پاسخ:

dim ds As New DataSet()
dim fs as FileStream = new FileStream (Server.MapPath ("myFile.xml"),FileMode.Open , FileAccess.Read )
ds.ReadXml (fs)
DataGrid1.DataSource = ds
DataGrid1.DataBind ()


------------------------------------------------------------------------------------------------------------------

49) نحوه ی ذخیره ی یک مقدار رشته ای در یک فایل XML

پاسخ:

Dim xmlText As String = "Node1Node2"
Dim xmlDoc As New XmlDocument
xmlDoc.LoadXml(xmlText)
Dim writer As XmlTextWriter = New XmlTextWriter(Server.MapPath("data.xml"), Nothing)
writer.Formatting = Formatting.Indented
xmlDoc.Save(writer)


------------------------------------------------------------------------------------------------------------------

50) نحوه ی استفاده از کنترل XML در ASP.NET

پاسخ:

<asp:Xml id="Xml1" DocumentSource="products.xml" runat="server"></asp:Xml>


------------------------------------------------------------------------------------------------------------------

51) یک فایل XML دارم که در آن مشخصات محصولات نگهداری می شود.
تگ ProductID شامل یک Attribute به نام pcode است.
قصد نمایش تمامی Attribute های هر کدام از محصولات را در DataGrid دارم. 

پاسخ:
باید از نیم اسپیس System.XML استفاده کنید.
با فرض اینکه ساختار فایل XML شما به شکل زیر است:

<?xml version="1.0" standalone="yes"?>
<Original>
<Product>
<ProductID pcode="P2">2</ProductID>
<ProductName>Milk</ProductName>
<CategoryID>1</CategoryID>
</Product>
<Product>
<ProductID pcode="P4">3</ProductID>
<ProductName>Cheese</ProductName>
<CategoryID>2</CategoryID>
</Product>
</Original>

به شکل زیر، تنها تگ های ProductID را انتخاب کنید:

Dim xmldoc As XmlDocument = new XmlDocument()
xmldoc.Load(Server.MapPath("myFile.xml"))
Dim xmlnodes As XmlNodeList = xmldoc.SelectNodes("Original/Product/ProductID")
DataGrid1.DataSource = xmlnodes
DataGrid1.DataBind()

و سپس در فایل aspx خود:

<asp:DataGrid id="DataGrid1" AutoGenerateColumns="False" runat="server">
<Columns>
     <asp:TemplateColumn HeaderText="ProductCode">
     <ItemTemplate>
          <%#CType(Container.DataItem, System.Xml.XmlNode).Attributes("pcode").value%>
     </ItemTemplate>
     </asp:TemplateColumn>
</Columns>
</asp:DataGrid>


------------------------------------------------------------------------------------------------------------------

52) توضیح مختصری در رابطه با کاربرد User Control ها: 

پاسخ:
در قسمت هایی از وب فرم های خود که نیاز به نمایش مکرر آنها دارید همانند Header و Footer سایت می بایست از User Control ها استفاده کنید.
اعمالی نیز که به طور مداوم با آنها سر و کار دارید، همانند Paging، ایجاد فرم Login و ... نیز می توانند انتخاب های خوبی برای تبدیل شدن به User Control باشند.

------------------------------------------------------------------------------------------------------------------

53) برخی از قسمت های وب سایت من، باید تنها برای عده ی خاصی از کاربران نمایش داده شوند.
به چه طریق می توانم این روش را عملی سازم؟

پاسخ:
استفاده از HttpHandlers یا HttpModules بهترین انتخاب است.
مقاله زیر را ببینید:
http://www.devx.com/dotnet/Article/6962/0/page/4

------------------------------------------------------------------------------------------------------------------

54) نحوه اضافه کردن یک User Control به صورت پویا: 

پاسخ:
نام فایل ascx را به متد LoadControl بدهید. سپس هر کنترلی که از کلاس Control در ASP.NET مشتق شده باشد، قادر است تا با استفاده از متد Add خاصیت Controls خود، User Control را به لیست کنترل های خود اضافه کرده و نمایش دهد.
در مثال زیر، از کنترل Panel استفاده شده است:

Dim myControl As Control = CType(Page.LoadControl("myUserControl.ascx"), Control)
Panel1.Controls.Add(myControl)


------------------------------------------------------------------------------------------------------------------

55) ادامه دارد...

----------

