ورود / ثبت نام
0
0

آموزش ساخت نظرات تو در تو در ASP.NET

505 بازدید
نظرات تو در تو

نظرات تو در تو

امروز میریم سراغ آموزش ساخت  نظرات تو در تو  در سایت  به این صورت که میتوانید به نظر ثبت شده جواب بدید ، کار زیاد سختی نیست فقط نیاز به یک منطق درست داره ، که باهم در موردش بحث میکنیم ، آموزش در محیط ASP.NET و زبان سی شارپ خواهد بود و دیتابیس نیز در SQL Server ساختیم ، نکته هایی در پروژه داریم  که کمی به توضیحات و روند کار  دقت لازم را داشته باشید.

اول کار نیاز به یک دیتابیس داریم در SQL Server پکیج کامل آن را براتون قرار دادم ، برای روند سریع کار کد زیر را در SQL Server اجرا کنید تا جداول دیتابیس ساخته بشه ! نام دیتابیس بزارید :DB_CommentSite

کد ساخت جدول های SQL Server:

CREATE TABLE [dbo].[Tbl_User](
	[UserID] [int] IDENTITY(1,1) NOT NULL,
	[FullName] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_Tbl_User] PRIMARY KEY CLUSTERED 
(
	[UserID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Tbl_User] ON
INSERT [dbo].[Tbl_User] ([UserID], [FullName]) VALUES (1, N'مسعود شریفی')
INSERT [dbo].[Tbl_User] ([UserID], [FullName]) VALUES (2, N'داریوش فرخی')
SET IDENTITY_INSERT [dbo].[Tbl_User] OFF
/****** Object:  Table [dbo].[Tbl_News]    Script Date: 07/25/2015 16:24:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tbl_News](
	[NewsID] [int] IDENTITY(1,1) NOT NULL,
	[NewsTitle] [nvarchar](50) NOT NULL,
	[Date] [datetime] NOT NULL,
	[Note] [nvarchar](50) NULL,
 CONSTRAINT [PK_Tbl_News] PRIMARY KEY CLUSTERED 
(
	[NewsID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Tbl_News] ON
INSERT [dbo].[Tbl_News] ([NewsID], [NewsTitle], [Date], [Note]) VALUES (1, N'ام اس پی سافت مرجع تخصصی برنامه نویسی', CAST(0x0000A12500000000 AS DateTime), N'ام اس پی سافت مرجع تخصصی برنامه نویسی')
SET IDENTITY_INSERT [dbo].[Tbl_News] OFF
/****** Object:  Table [dbo].[Tbl_comment]    Script Date: 07/25/2015 16:24:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Tbl_comment](
	[CommentID] [int] IDENTITY(1,1) NOT NULL,
	[NewsID] [int] NOT NULL,
	[UserID] [int] NOT NULL,
	[CommentReplyID] [int] NULL,
	[Note] [nvarchar](250) NULL,
 CONSTRAINT [PK_Tbl_comment] PRIMARY KEY CLUSTERED 
(
	[CommentID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[Tbl_comment] ON
INSERT [dbo].[Tbl_comment] ([CommentID], [NewsID], [UserID], [CommentReplyID], [Note]) VALUES (1, 1, 1, NULL, N'سلام')
INSERT [dbo].[Tbl_comment] ([CommentID], [NewsID], [UserID], [CommentReplyID], [Note]) VALUES (2, 1, 2, 1, N'سلام خوبی')
SET IDENTITY_INSERT [dbo].[Tbl_comment] OFF
/****** Object:  ForeignKey [FK_Tbl_comment_Tbl_comment]    Script Date: 07/25/2015 16:24:01 ******/
ALTER TABLE [dbo].[Tbl_comment]  WITH CHECK ADD  CONSTRAINT [FK_Tbl_comment_Tbl_comment] FOREIGN KEY([CommentReplyID])
REFERENCES [dbo].[Tbl_comment] ([CommentID])
GO
ALTER TABLE [dbo].[Tbl_comment] CHECK CONSTRAINT [FK_Tbl_comment_Tbl_comment]
GO
/****** Object:  ForeignKey [FK_Tbl_comment_Tbl_News]    Script Date: 07/25/2015 16:24:01 ******/
ALTER TABLE [dbo].[Tbl_comment]  WITH CHECK ADD  CONSTRAINT [FK_Tbl_comment_Tbl_News] FOREIGN KEY([NewsID])
REFERENCES [dbo].[Tbl_News] ([NewsID])
GO
ALTER TABLE [dbo].[Tbl_comment] CHECK CONSTRAINT [FK_Tbl_comment_Tbl_News]
GO
/****** Object:  ForeignKey [FK_Tbl_comment_Tbl_User]    Script Date: 07/25/2015 16:24:01 ******/
ALTER TABLE [dbo].[Tbl_comment]  WITH CHECK ADD  CONSTRAINT [FK_Tbl_comment_Tbl_User] FOREIGN KEY([UserID])
REFERENCES [dbo].[Tbl_User] ([UserID])
GO
ALTER TABLE [dbo].[Tbl_comment] CHECK CONSTRAINT [FK_Tbl_comment_Tbl_User]
GO

 

نکته که داریم رابطه بین جدول هاست در جدول Comment یک فیلدی به نام CommentReplayIdD داریم که روی کلید اصلی خوده جدول Comment ریلیشن داره یعنی رابطه داره ! یک نکته مهم است که باید پیاده سازی کنید.

روی صفحه یک LinqDataSource قرار بدید و در رویداد OnSelecting کد زیر را بنویسد :

 e.Result = (from u in db.Tbl_News select u).ToList();

با این کد جدول خبر ها را Load میکنیم !

نیاز به یک ListView داریم برای نمایش اخبار و ثبت نظرات ، کد زیرو برا نمایش اخبار قرار بدید !

 <asp:ListView runat="server" ID="lvShowNews" DataSourceID="dsShowNews">
                    <ItemTemplate>
                        <div class="panel panel-default">
                            <div class="panel-heading">
                                <h3 class="panel-title"><%#Eval("NewsTitle") %></h3>
                            </div>
                            <div class="panel-body">
                                <%#Eval("Note") %>

                                <div class="clearfix"></div>
                                <br />
                                <div class="col-md-6">
                                    <div class="form-group">
                                        <asp:Label runat="server" ID="lblName" Text="نام:"></asp:Label>
                                        <asp:TextBox runat="server" ID="txtName" CssClass="form-control" />
                                    </div>
                                    <div class="form-group">
                                        <asp:Label runat="server" ID="lblNote" Text="دیدگاه:"></asp:Label>
                                        <asp:TextBox runat="server" TextMode="MultiLine" Width="400px" ID="txtNote" CssClass="form-control" />
                                    </div>
                                    <div class="form-group">
                                        <asp:Button runat="server" ID="btnAddComment" CssClass="btn btn-success" Text="ثبت نظر" />
                                    </div>
                                </div>
                            </div>
                    </ItemTemplate>
                </asp:ListView>

بسیار خوب خبر هایی که داریمو الان باید بببنیم ، حا ل برای ثبت نظر نیاز به یک LinqDataSource و یک Repeater داریم که برای پاسخ نظر اول نیز یک Repeater درون Repeater  اول نیاز داریم ،

اول کد زیر را در رویداد OnSelecting LinqDataSource قرار بدید !

 e.Result = (from u in db.Tbl_comment
                        where u.NewsID == 1
                        where u.CommentReplyID==null
                        select new
                        {
                            u.NewsID,
                            u.CommentID,
                            u.CommentReplyID,
                            u.Note,
                            u.UserID,
                            u.Tbl_User.FullName,
                            Replay = db.Tbl_comment.Where(c => c.CommentReplyID == u.CommentID)
                            .Select(s => new
                            {
                              s.CommentReplyID,s.Tbl_User.FullName,s.Note
                            
                            })
                        }).ToList();

در این کوئری که نوشتیم یک Replay است که وظیفه نمایش نظرات پاسخ شده را دارد !

خوب برای نمایش هم کد زیر را در صفحه ASPX خود قرار بدید !

 <asp:LinqDataSource runat="server" ID="dsShowComment" OnSelecting="dsShowComment_OnSelecting"></asp:LinqDataSource>
                        <ul>
                        <asp:Repeater runat="server" ID="rptComment" DataSourceID="dsShowComment">
                            <ItemTemplate>
                                <li>
                                    <%#Eval("FullName") %>
                                </li>
                                <li>
                                    <%#Eval("Note") %>
                                </li>
                                <div class="clearfix"></div>
                                <asp:Repeater runat="server" ID="rptRepyly" DataSource='<%#Eval("Replay") %>'>
                                    <ItemTemplate>
                                        <li>
                                            <%#Eval("FullName") %>
                                        </li>
                                        <li>
                                            <%#Eval("Note") %>
                                        </li>
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ItemTemplate>
                        </asp:Repeater>
                            </ul>

 

برای درک بهتر پیشنهاد میکنم نمونه سورسی که ضمیمه کردم رو ببینید ! امید وارم استفاده کنید.

راستی برای ارتباط از EntityFramework استفاده کردیم ، یک Modal برای ارتباط با دیتابیس بسازید.

آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=14818
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
مسعود شریفی پور
از سال 88 که با برنامه نویسی آشنا شدم خیلی علاقه مند بودم یک بستر آموزشی بسازم در فضای وب و به انتشار آموزش های در این زمینه بپردازم.حالا یک تیم داریم و با قدرت رو به جلو حرکت میکنیم.
مطالب بیشتر
برچسب ها:

نظرات

8 نظر در مورد آموزش ساخت نظرات تو در تو در ASP.NET

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. سلام
    من می خواستم بپرسم که کد زیر کارش چیه؟
    Eval(”NewsTitle”)%> p%>
    منظور از NewsTitle عنوان هر خبر است که دردیتابیس ذخیره شده است؟
    یعنی برای هر خبر با توجه به این کد عنوان هر خبر در صفحه آورده می شود؟

    لایک

  2. سلام مهندس
    پس قابلیت پاسخ دهی به هر نظر کو!من که چیز خاصی ندیدم!
    در ضمن اگه کسی نخواد تو سایت ثبت نام کنه بعد بخواد بیاد کامنت بذاره اونوقت با این چیزی که شما نوشتین نمیشه همچین کاری کردا! بعدشم قبل از اینکه مدیر کامنت رو تایید نکنه نباید کامنت کاربر نمایش داده بشه!شرظ نمایش باید تایید مدیر باشه!
    مهندس جان یه چیزی بنویس که کامل باشه!
    مهندس نظرات تو در تویی مثل سایت خودتون طراحی کنید. من که از این چیزی که طراحی کردین خوشم نیومد..موفق باشین.

    لایک

  3. سلام میشه کدهای سمت سرور رو با زبان sql بنویسید و بجای linqdatasource از همون objectdatasource استفاده کنید و ی خورده هم بیشتر توضیح بدید .
    ممنون

    لایک