PDA

View Full Version : سوال: ساختن چند صفحه توسط کاربر



اوبالیت به بو
دوشنبه 12 بهمن 1388, 07:00 صبح
سلام
چی جوری میشه امکانی رو در اختبار کاربر قرار داد که چند صفحه درست کنه و محتواش رو خودش تنظیم کنه؟
مثلاً صفحه تماس با ما رو خودش ایجاد کنه و محتویاتش رو هم خودش بنویسه. یا صفحه های مشابه این....

naeeme
دوشنبه 12 بهمن 1388, 09:18 صبح
یه راه حل این هست که شما یه page اصلی در نظر بگیریر که با کویری استرینگ نوع اون صفحه مشخص بشه. بعد محتویات htmlیی که کاربر می خواد نمایش بده رو از DB بخونی و در اون صفحه نمایش بدی.

اوبالیت به بو
دوشنبه 12 بهمن 1388, 09:36 صبح
یه راه حل این هست که شما یه page اصلی در نظر بگیریر که با کویری استرینگ نوع اون صفحه مشخص بشه. بعد محتویات htmlیی که کاربر می خواد نمایش بده رو از DB بخونی و در اون صفحه نمایش بدی.

ممنون.
کار درست هم همین طوری هست. اما یکم تو پیاده سازیش مشکل دارم. فقط یه نگاه بندازم متوجه می شم.

merlin_vista
دوشنبه 12 بهمن 1388, 13:34 عصر
این کد ها را من حدود یک سال پیش نوشتم ، 100% اگه بخواهم بنویسم دیگه اینجوری نمینویسم ( ولی برای Test و یادگیری خوبه )

1 ) ابتدا در دیتابیس یک جدول ( نام جدول در اینجا Tbl_pages است ) ایجاد کنید و فیلد های زیر را در آن بسازید .
[f_address] = نام صفحه در این فیلد نگهداری میشود ( PK است )
[f_Code] = کدهای Html صفحه در این فیلد نگهداری میشوند .
[f_Title] = عنوان صفحه
[f_IsMasterPage] = از نوع bool که مشخص میکنه که آیا صفحه مورد نظر از MasterPage اصلی سایت استفاده کنید یا یک صفحه سفید خالی باشد .

2 ) سپس یک صفحه برای انجام عملیات ایجاد میکنیم ( در اینجا نام آن CreatePage.aspx است ) سپس آن را به مسترپیج اصلی سایت نسبت میدهیم /


<%@ Page Language="C#‎‎‎" MasterPageFile="~/Template.master" AutoEventWireup="true" CodeFile="CreatePage.aspx.cs" Inherits="CreatePage" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<asp:Literal ID="Literal1" runat="server"></asp:Literal>
</asp:Content>
یک MasterPage خالی با نام any ایجاد کنید که اگر کاربر خواست از مسترپیج اصلی استفاده نکند صفحه را به مستر Any نسبت بدهید .

<%@ Master Language="C#‎" AutoEventWireup="true" CodeFile="any.master.cs" Inherits="any" %>

<head runat="server">
</head>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

</asp:ContentPlaceHolder>






3 ) در رویداد Page_PreInit کد های زیر را مینویسیم :


try
{

string name = Request.QueryString["name"].ToString().Trim();
arr = obj_bll.select_Single_Page(name);
if (Convert.ToBoolean(arr[3]))
{

this.Page.Title = arr[2].ToString().Trim();

}
else
{
this.Page.MasterPageFile = "~/any.master";
this.Page.Title = arr[2].ToString().Trim();
Response.Write(HttpUtility.HtmlDecode(arr[1].ToString().Trim()));
}
}
catch { }این کد اطلاعات صفحه را از بانک به دست می آورد .
اگر از مسترپیج اصلی سایت استفاده شده باشد ( فیلد مربوطه true باشد . فقط عنوان صفحه را ست میکنه . )
اگر از مسترپیج اصلی استفاده نشده باشد. صفحه را به یک مسترپیج خالی نسبت میدهد .

4 ) سپس در در رویداد Page_Load کد های زیر را مینویسم :

try
{
if (Convert.ToBoolean(arr[3]))
{
this.Literal1.Text = HttpUtility.HtmlDecode(arr[1].ToString().Trim());

}
else
{
this.Literal1.Visible = false;
}
}
catch { }همان طور که میبینید . اگر از مسترپیج اصلی سایت استفاده شده باشد و در مرحله قبل مسترپیج خالی جایگزین نشده باشه اطلاعات در Litra نوشته میشه .


5 ) در وب کانفیگ با استفاده از UrlReWrite میخواهیم آدرس ها را تغییر دهیم که مانند یک صفحه واقعی به نظر بیاد .
ابتدا URLRewrite را دانلود کنید (http://www.urlrewriting.net/159/en/downloads/downloads/downloads/downloads/downloads/downloads.html)
سپس وب کانفیگ را به صورت زیر تنظیم کنید .


<rewriter>
<rewrite url="~/page/(.+).aspx" to="~/CreatePage.aspx?name=$1" ></rewrite>

</rewriter>