ایجاد نظر سنجی تودرتو با Asp.Net
ایجاد نظر سنجی تودرتو با Asp.Net
در این پست قولی که به دوستان داده بودیم نحوه نمایش و پاسخ دهی به نظرات تودرتو را آماده کردیم.
در بسیاری از سایت ها دیده اید. هنگامی که نظر ثبت می کنید می توانید به همان نظر نیز جواب دهید و همچنین به جواب نظر نیز می توانید نظر دهید.
در پست های قبلی آموزش نحوه نمایش و پاسخ دهی به نظرات تودرتو را در PHP و MVC 5 را قرار داده بودیم و توصیه می کنیم که به این آموزش ها نگاهی بکنید. در اینجا مد نظر ما آموزش ایجاد نظرات تودرتو با MVC 5 است.
در اینجا روشی که ما توضیح می دهیم یک روش ساده و کاربردی است و شما با جستجو (جستجو در سایت خارجی) در اینترنت می توانید روش های دیگری برای این کار پبدا کنید.
طراحی جدول
ابتدا باید یک جدول در دیتابیس ایجاد کنید. فیلد های این جدول به صورت زیر می باشند.
CommentId
آی دی جدول که به صورت یک کلید اصلی تعریف می کنیم
ParentId
کلید خارجی جدول که بصورت نال تعریف شده
نکته مهم
ما در این جدول با استفاده از این فیلد یک ارتباط داخلی یک به چند با کلید اصلی بر قرار می کنیم تا بتوانیم با استفاده از این فیلد به نظرات پاسخ تودرتو دهیم.
Name
فیلد نام کاربر نظر دهنده
فیلد ایمیل کاربر نظر دهنده
Comment
فیلد نظر کاربر
InsertDateTime
تاریخ و ساعت ثبت نظر را ثبت می کنیم.
بعد از تعریف جدول نوبت به ثبت نظر می رسد.
توضیحات مربوط به ثبت نظر را از پست MVC 5 رو مطالعه کنید.
نحوه نمایش نظرات
متد CallDisplayComment
private void CallDisplayComment() { DataSet ds = new DataSet(); SqlConnection con = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=NestedComment;Data Source=.;MultipleActiveResultSets=True"); SqlDataAdapter da = new SqlDataAdapter("Select * From Comments", con); da.Fill(ds); DataTable comment = ds.Tables[0]; DataRow[] parentComments = comment.Select("ParentId = 0"); var sb = new StringBuilder(); string result = DisplayComment(parentComments, comment, sb); litDisplayComment.Text = result; }
برای نمایش نظرات ابتدا یک متد به نام CallDisplayComment تعریف می کنیم و نظراتی که parentId آنها برابر صفر است را از جدول کامنت می خوانیم و در یک DataRow قرار می دهیم و سپس متد DisplayComment را فراخوانی می کنیم.
متد DisplayComment یک رشته را بر میگرداند و رشته بازگشتی را در یک متغیر به نام result قرار می دهیم و سپس مقدار آن را در Literal ی که در صفحه aspx تعریف کردیم قرار می دهیم.
متد DisplayComment
private string DisplayComment(DataRow[] parentComments, DataTable table, StringBuilder sb) { sb.AppendLine("<ul>"); if (parentComments.Length > 0) { foreach (DataRow dr in parentComments) { string name = dr["Name"].ToString(); string insertDateTime = dr["InsertDateTime"].ToString(); string comment = dr["Comment"].ToString(); sb.Append("<li>"); string allComment = String.Format("<div class='child'><div>{0}</div><div>{1}</div><div>{2}</div><div class='btnReplay'><a href='#insertCommentForm' id='btnReply_{3}' >پاسخ</a></div></div>", name, insertDateTime, comment, dr["CommentId"].ToString()); sb.Append(allComment); string commentId = dr["CommentId"].ToString(); DataRow[] subComment = table.Select(String.Format("ParentId = {0}", commentId)); if (subComment.Length > 0) { var subCommentBuilder = new StringBuilder(); sb.Append(DisplayComment(subComment, table, subCommentBuilder)); } sb.Append("</li>"); } } sb.Append("</ul>"); return sb.ToString(); }
این متد سه ورودی دریافت می کند.
نکته مهمی که باید در این کد به آن توجه کنید نحوه نمایش لینک پاسخ است که به صورت یک تگ a تعریف شده و id نیز برابر _btnReply و شماره کامنت قرار دادیم.
نحوه کار این متد به صورت یک متد بازگشتی است به این صورت که بعد از نمایش کامنت بررسی می کنیم که آیا این کامنت پاسخی دارد در این صورت متد DisplayComment را دوباره فراخوانی می کنیم.
در سورسی که برای دانلود قرار داده ایم ثبت کامنت و نمایش آنها به صورت کامل کد نویسی شده و فایل دیتابیس برنامه نیز کنار آن قرار داده ایم.
نظر / سوال