PDA

View Full Version : ایجاد یک url اختصاصی برای کاربر



shakiba_12
چهارشنبه 14 اردیبهشت 1384, 11:36 صبح
من در دات نت می خوام براساس تمپلیتی که قبلا انتخاب شده براساس نام یوزر به نام خودش براش یه صفحه درست بشه. دستوری که برای ایجاد یک صفحه جدید نیازه می خوام.
منون :oops:

kochol
چهارشنبه 14 اردیبهشت 1384, 18:52 عصر
با سلام

یک صفحه html اگه بخوای میشه ولی aspx نمیشه چون کد سمت سرور را باید کامپایل کرد ولی می تونی از روشی که کدهای برنامه را در خود فایل aspx می نویسند استفاده کنی

که هیچکدام از روش های بالا پیشنهاد نمی شود و شما باید مثلا صفحه ای بسازید که در آن بر اساس درخواست تغییر کند مثل viewuser.aspx?id=215

Good Luck

Behrouz_Rad
چهارشنبه 14 اردیبهشت 1384, 21:41 عصر
بدین منظور می تونید از یک User Control استفاده کنید.
خواصی که قصد سفارشی کردن آنها را دارید، به صورت یک خواص ساده یا یک Property تعریف کنید.
مثال (خواص ساده):


<Script Runat="Server">

Public PageTitle As String = "My Default Value"

</Script>

<html>
<head><title><%=PageTitle%></title></head>
<body>

نحوه استفاده:


<%@ Register TagPrefix="myControl" TagName="Header"
Src="Header.ascx" %>

<myControl:Header
ID="ctlHeader"
PageTitle="Salam Aghaye X"
Runat="Server" />

در مورد ایجاد Property های سفارشی نیز، با استفاده از متدهای Get و Set قادر به انجام این مهم هستید.
موفق باشید.

shakiba_12
پنج شنبه 15 اردیبهشت 1384, 21:20 عصر
ممنون از راهنمایی
تستش میکنم

یه مشکل دیگه اینکه کد اچ تی ام رو توی ستون دیتابیس میریزم و بعد تو فرم می خونم ولی موقع آپلود به کدها گیر میده :sorry:

Behrouz_Rad
پنج شنبه 15 اردیبهشت 1384, 21:49 عصر
در بالای فایل aspx به دایرکتیو Page خاصیت و مقدار زیر را اضافه کنید:


validateRequest="False"

shakiba_12
پنج شنبه 15 اردیبهشت 1384, 23:03 عصر
ممنون آقا بهروز
یه سوال دیگه
مثلا کاربر یه تمپلیت خاص خودش رو درست میکنه یعنی از
<html>
تا
</html>
حالا می می خوام کل این کد رو جایگزین کد خودم در صفحه ای که طراحی کردم بذارم
این رو هم میشه جایگزین کرد؟ :sorry:

Behrouz_Rad
پنج شنبه 15 اردیبهشت 1384, 23:27 عصر
بله.
ورودی رو با استفاده از متد HTMLEncode کلاس HttpUtility به فرمت HTML تبدیل کنید و در خواص مورد نظر User Control قرار بدید.

shakiba_12
جمعه 16 اردیبهشت 1384, 00:08 صبح
ممنون
تستش میکنم
بالا گفتید اسم یو آر ال رو بر اساس نام یوزر تغییر می دهیم.
ممنون میشم کد کاملش رو بنویسید(البته بی زحمت) :oops:

Behrouz_Rad
جمعه 16 اردیبهشت 1384, 00:18 صبح
بالا گفتید اسم یو آر ال رو بر اساس نام یوزر تغییر می دهیم.
:گیج: :گیج: :گیج:
کجا؟

shakiba_12
جمعه 16 اردیبهشت 1384, 11:39 صبح
وقتی که در خواست کرد صفحه ی اختصاصی خودش رو بینه مثلا اسم صفحه هست:
weblog.aspx می خوام بشه
weblog.userid.aspx
ولی این راه یک مشکل داره
یک فرد به عنوان بیننده بدون زدن یوزر نیم باید بتونه صفحه ی مورد نظر رو ببینه
ولی با راه تغییر یو ار ال بر اساس نام کاربر این امکان پذیر نیست
فکر میکنم حتما باید یه صفحه ی جدید به ازای هر کاربر ثبت نام شده ایجاد بشه
:گیج:

Behrouz_Rad
جمعه 16 اردیبهشت 1384, 21:21 عصر
خیر.
ID کاربر را به عنوان یک پارامتر به یک صفحه پاس دهید و محتویات صفحه را بر اساس مشخصه کاربر نمایش دهید.

shakiba_12
شنبه 17 اردیبهشت 1384, 00:36 صبح
مثلا فکر کنید من الان می خوام وبلاگ شما رو ببینم
یعنی زمانی که من اسم وبلاگ شما رو میزنم آی دی شما تشخیص داده میشه و به صفحه پاس داده میشه

؟

Behrouz_Rad
شنبه 17 اردیبهشت 1384, 00:52 صبح
اگر قصد ایجاد Sub Domain دارید یک بحث جداست!

aidinwashere
شنبه 17 اردیبهشت 1384, 09:39 صبح
ما که به هر دری زدیم نتونستیم به صورت پویا sub domain درست کنیم.

shakiba_12
شنبه 17 اردیبهشت 1384, 10:07 صبح
هدف اصلیم که ساب دمینه ولی
الان فرض کنید حتی بخوام مثلا باشه
pesianblog/userID.aspx
یعنی حالت فلدر
کلا می خوام بدونم چطور میشه این کار رو کرد
یعنی من به عنوان یک بیننده بتونم وبلاگ یک کاربر رو ببینم ؟
حالا یا ساب دمین یا FOLder :گیج:

Behrouz_Rad
شنبه 17 اردیبهشت 1384, 12:56 عصر
سوال شما رو دقیقا متوجه نمیشم!
اگر قصد ایجاد پوشه برای هر کاربر دارید که مسلما روش رو می دونید.
اگر منظورتون این هست که یک صفحه برای تمامی کاربران به شکل های مختلف ظاهر بشه ،در این مواقع باید از Session استفاده کنید.
واسه همینه که شما در ظاهر ممکنه فقط یک صفحه رو ببینید ولی قالب صفحه برای هر کاربر متفاوت هست.

shakiba_12
شنبه 17 اردیبهشت 1384, 12:57 عصر
یه مشکل دیگه این که
تو SQLSERVER من هر کاری میکنم که کاراکتر زیاد رو مثل کد اچ تی ام یه صفحه رو قبول کنه نمیشه
ntext , nvarchar رو هم امتحان کردم ولی جواب نداده.میتونه مشکل از اس کیو ال سرور خودم باشه؟

Behrouz_Rad
شنبه 17 اردیبهشت 1384, 13:32 عصر
1) تا چند کاراکتر رو قبول می کنه؟
2) به چه شکل جداول رو ایجاد کردید؟ (T-SQL یا ویزارد)
3) کد ذخیره در دیتابیس رو در اینجا بنویسید.

shakiba_12
یک شنبه 18 اردیبهشت 1384, 00:11 صبح
سوال شما رو دقیقا متوجه نمیشم!
اگر قصد ایجاد پوشه برای هر کاربر دارید که مسلما روش رو می دونید.
اگر منظورتون این هست که یک صفحه برای تمامی کاربران به شکل های مختلف ظاهر بشه ،در این مواقع باید از Session استفاده کنید.
واسه همینه که شما در ظاهر ممکنه فقط یک صفحه رو ببینید ولی قالب صفحه برای هر کاربر متفاوت هست.
فرض کنید
وبلاگ شما هست
blog/behrouz
دو حالت داره
اینکه شما خودتون لاگین کنید
تغییرات ایجاد کنید
بعد بخواید وبلاگ آپدیت شده ی خودتونو ببینید
که خب نام یوزر شما رو می خونه و بر اساس اون
به یو آر ال اضافه میکنه (که البته من اضافه کردنش رو بلد نیستم)
و شما وبلاگ خودتونو می بینید
حالت دوم اینکه من می خوام سایت شما رو ببینم
آدرس blog/behrouz
رو میزنم اینجا چجوری باید تشخیص بده
این صفحه متعلق به چه کسیه
که بره از دیتابیس تمپلیت شما رو بخونه و بیاره

که همون طور که قبلا گفتم تغییر یو ار ال رو براساس اسم یوزر بلد نیستم
:sorry:

shakiba_12
یک شنبه 18 اردیبهشت 1384, 00:18 صبح
1) تا چند کاراکتر رو قبول می کنه؟
2) به چه شکل جداول رو ایجاد کردید؟ (T-SQL یا ویزارد)
3) کد ذخیره در دیتابیس رو در اینجا بنویسید.
من جداول رو قبلا توی اس کیو ال ایجاد کرده بودم که ایمپورت کردم تو اس کیو ال
توی اکسس مشکل نداشتم
مثلا اینو می خوام بریزم توی دیتابیس
-----------------------------------------------------------------------------------------------------
<HTML dir="rtl">
<HEAD>
<title>weblog</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<asp:repeater id="RPTPOST" Runat="server">
<ItemTemplate>
<p align="justify">
<b>
<%# Container.DataItem("Title") %>
</b>@
<br>
<%# Container.DataItem("bodypost") %>
<br>
-- <span lang="fa">نوشته شد در ساعت</span>
<%# Container.DataItem("datepost") %>
<%=post%>
</asp:DataList> </div>
<asp:Literal Runat="server" ID="DayBox"></asp:Literal></p>
<SeparatorTemplate>
<hr>
</SeparatorTemplate>
</ItemTemplate>
<HeaderTemplate>
<table width="70%" border="1" align="center">
<tr>
<td>
</HeaderTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:repeater></form>
</body>
</HTML>
-----------------------------------------------------------------------------------------------------

تا نصفه که می ریزم می پذیره
ولی کلشو قبول نمی کنه :(

shakiba_12
یک شنبه 18 اردیبهشت 1384, 00:20 صبح
ببخشیدا
ولی "مسلما" نمی دونم چطور میشه وقتی کاربری ثبت نام کرد براش یه فلدر ایجاد بشه :sorry:

Farhad.B.S
یک شنبه 18 اردیبهشت 1384, 02:27 صبح
لازم نیست حتما فلدری به صورت فیزیکی ایجاد بشه.
با استفاده از URL Rewriting میتونید به تعریف انواع url های مجازی بپردازید ؛

URL Rewriting in ASP.Net (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp)

shakiba_12
یک شنبه 18 اردیبهشت 1384, 12:24 عصر
لازم نیست حتما فلدری به صورت فیزیکی ایجاد بشه.
با استفاده از URL Rewriting میتونید به تعریف انواع url های مجازی بپردازید ؛

URL Rewriting in ASP.Net (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/urlrewriting.asp)
ممنون آقا فرهاد
ولی نمی دونم چرا همش به #C از وی بی چیزی گیر نیاوردم
:(

Behrouz_Rad
یک شنبه 18 اردیبهشت 1384, 20:12 عصر
1) دلیل اینکه میخواید اون کد رو در دیتابیس بریزید چیه؟
2) کد اضافه کردن رو در اینجا بنویسید.

shakiba_12
یک شنبه 18 اردیبهشت 1384, 20:22 عصر
1) دلیل اینکه میخواید اون کد رو در دیتابیس بریزید چیه؟
2) کد اضافه کردن رو در اینجا بنویسید.
1) خب هر کاربری برای خودش یک تمپلیت ایجاد میکنه یا تمپلیت که قبلا طراحی شده تغییر میده .
براساس تمپلیت ،صفحه شخصی خودش با قالب انتخابی خودش ایجاد میشه
من یه صفحه خالی ایجاد کردم و کاربری که ثبت نام میکنه و قالب خودش رو طراحی میکنه اون کد باید به صفحه ی خالی فرستاده بشه و البته در دیتابیس هم سیو بشه

2)مشکل از کد من نیست چون با کاراکتر کمتر تست کردم جواب داده
مثلا کد آ پدیت


strsql = "Update TBLuser Set blogtemp ='" & txttemp.Text & "',posttemp='" & txtposttemp.Text & "' where userid = '" & userid & "'"
cmdupdate = New SqlCommand(strsql, con)
con.Open()
cmdupdate.ExecuteScalar()
con.Close()

Behrouz_Rad
یک شنبه 18 اردیبهشت 1384, 22:55 عصر
نحوه ایجاد جدول و تعریف فیلدها به چه گونه است؟
ویزارد یا T-SQL
چند کاراکتر در فیلد ذخیره می شود؟

shakiba_12
یک شنبه 18 اردیبهشت 1384, 23:49 عصر
نحوه ایجاد جدول و تعریف فیلدها به چه گونه است؟
ویزارد یا T-SQL
چند کاراکتر در فیلد ذخیره می شود؟
من چون قبلا با اکسس درست کرده بودم همون جداول رو در sql ایمپورت کردم

همون کد اچ تی ام الی که صفحه قبل نوشتم
تقریبا نصف بیشترش رو می گیره
ولی کلش رو نمی گیره

Behrouz_Rad
دوشنبه 19 اردیبهشت 1384, 00:35 صبح
ممکنه در Import کردن فیلدها، تداخل Type به وجود آمده باشه.
به شکل زیر عمل کنید.
1) جدول را در حالت Design باز کنید و ببینید که نوع فیلد مشکل دار چیست و میزان بازه آن چه مقدار تعیین شده.
2) یک فیلد به صورت دستی به جدولتون اضافه کنید و نوع آن را ntext در نظر بگیرید.
مقادیر رو در آن اضافه کنید. نتیجه رو اعلام کنید.

shakiba_12
دوشنبه 19 اردیبهشت 1384, 00:48 صبح
ممکنه در Import کردن فیلدها، تداخل Type به وجود آمده باشه.
به شکل زیر عمل کنید.
1) جدول را در حالت Design باز کنید و ببینید که نوع فیلد مشکل دار چیست و میزان بازه آن چه مقدار تعیین شده.
2) یک فیلد به صورت دستی به جدولتون اضافه کنید و نوع آن را ntext در نظر بگیرید.
مقادیر رو در آن اضافه کنید. نتیجه رو اعلام کنید.
1) فیلد مشکل در :ntext , length:16
2)
این ارور رو میده

Line 32: Incorrect syntax near 'ucomments'.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Line 32: Incorrect syntax near 'ucomments'.

Source Error:


Line 50: cmdupdate = New SqlCommand(strsql, con)
Line 51: con.Open()
Line 52: cmdupdate.ExecuteScalar()
Line 53: con.Close()
Line 54: Dim temp = Replace(txttemp.Text, "#blogtitle#", userid)

Behrouz_Rad
دوشنبه 19 اردیبهشت 1384, 01:02 صبح
1) همان طور که حدس می زدم بازه مورد قبول فیلد کم است. آن را افزایش دهید.

2) به احتمال زیاد اشکال در Sql Command شماست.
برخی از سینتکس های ANSII SQL، JET و SQL Server با هم متفاوت است.
SQL Command خود را در اینجا بنویسید.

shakiba_12
دوشنبه 19 اردیبهشت 1384, 09:00 صبح
1) همان طور که حدس می زدم بازه مورد قبول فیلد کم است. آن را افزایش دهید.

2) به احتمال زیاد اشکال در Sql Command شماست.
برخی از سینتکس های ANSII SQL، JET و SQL Server با هم متفاوت است.
SQL Command خود را در اینجا بنویسید.
اصلا بهم اجازه نمی ده بازه رو تغییر بدم

Behrouz_Rad
دوشنبه 19 اردیبهشت 1384, 10:03 صبح
فیلد را حذف کنید و دوباره ایجاد کنید.

shakiba_12
دوشنبه 19 اردیبهشت 1384, 10:09 صبح
فیلد را حذف کنید و دوباره ایجاد کنید.
این کار رو چندین بار انجام دادم
ولی 16 فیکس هست و غیر قابل تغییر

Behrouz_Rad
دوشنبه 19 اردیبهشت 1384, 11:30 صبح
اینجا بنده یک اشتباه کردم.
به این دقت نکرده بودم که فرمودید فیلد شما از نوع ntext است.
نوع داده ntext حداکثر تا 2 به توان 31 منهای 1 بایت کاراکتر (2,147,483,647) رو قبول می کنه و بازه آن غیر قابل تغییر است.
بازه داده های نوع nchar و nvarchar قابل تغییر است.
پیشنهاد می کنم مشکلتون رو در بخش SQL Server مطرح کنید.

shakiba_12
دوشنبه 19 اردیبهشت 1384, 17:43 عصر
ممنون آقا بهروز

یه سوال


Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim custompath As String
custompath = Request.Path.ToLower
If custompath.IndexOf("/blog/users/weblog.aspx/*.aspx") = 0 Then

End If
نمی دونم کد درسته یا نه
ولی می خوام بهش بگم
توی قسمت * هرچی گرفت به عنوان userid حسابش کنه
نمیدونم چطوری بهش بفهمونم :wink:

Behrouz_Rad
دوشنبه 19 اردیبهشت 1384, 18:29 عصر
Dim CustomPath As String = Request.Path.ToLower
Dim PosSlash As Int32 = CustomPath.LastIndexOf("/")
Dim PosDot As Int32 = CustomPath.LastIndexOf(".")
CustomPath = CustomPath.Substring(PosSlash + 1, (PosDot - PosSlash) - 1)
Response.Write("CustomPath")

:wise1:

jeivid
دوشنبه 02 دی 1387, 14:24 عصر
Dim CustomPath As String = Request.Path.ToLower
Dim PosSlash As Int32 = CustomPath.LastIndexOf("/")
Dim PosDot As Int32 = CustomPath.LastIndexOf(".")
CustomPath = CustomPath.Substring(PosSlash + 1, (PosDot - PosSlash) - 1)
Response.Write("CustomPath")

:wise1:

آقا بهروز ميتوني اين كدا به سي شارپ تبديلش كني؟ ممنون ميشم

Saber_Fatholahi
سه شنبه 03 دی 1387, 14:40 عصر
آقا بهروز ميتوني اين كدا به سي شارپ تبديلش كني؟ ممنون ميشم
با اجازه آقا بهروز



{
string CustomPath = Request.Path.ToLower;
Int32 PosSlash = CustomPath.LastIndexOf("/");
Int32 PosDot = CustomPath.LastIndexOf(".");
CustomPath = CustomPath.Substring(PosSlash + 1, (PosDot - PosSlash) - 1);
Response.Write("CustomPath");
}

iman_ad
شنبه 07 دی 1387, 23:55 عصر
از چه نسخه ای از sql استفاده می کنید اگه از 2005 استفاده می کنی از nvarchar(max) اتفاده کن