نمایش نتایج 1 تا 7 از 7

نام تاپیک: ارسال لیستی از مدل ها

  1. #1

    نقل قول: ارسال لیستی از مدل ها

    خواهش می کنم دوستان پاسخ بدهید.

    چون تو این تایپیک سوال رو نمایش نمیده دوباره می نویسم.

    برای مثال: میخوام لیستی از کامنت هایی که کاربران زیر مطالب صفحات می نویسند رو به ادمین نمایش بدم. بعد ادمین موارد مورد نظرش رو انتخاب کنه و دکمه تائید موارد انتخاب شده رو کلیک کنه. این لیست به کنترلر مربوطه ارسال بشه و موارد انتخاب شده update بشه.

    مدل کامنت من بشرح زیر هست:


    public class CommentModel
    {
    [Key]
    [Display(Name = "کد")]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
    public int CommentId { get; set; }

    [Required(ErrorMessage = "کاربر گرامی لطفا نام خود را وارد نمائید ")]
    [Display(Name = "نام")]
    [MaxLength(20, ErrorMessage = "کاربر گرامی حداکثر 20 کاراکتر می توانید وارد کنید")]
    public string CommentAuthor { get; set; }

    [Display(Name = "انتقادها و پیشنهادها:")]
    [DataType(DataType.MultilineText)]
    [Required(ErrorMessage = "کاربر گرامی لطفا انتقادها و پیشنهادهای خود را بنویسید ")]
    [MaxLength(255, ErrorMessage = "کاربر گرامی حداقل 50 کاراکتر و حداکثر 255 کاراکتر می توانید وارد کنید"),MinLength(10)]
    public string CommentContent { get; set; }

    [Display(Name = "تاریخ ارسال")]
    [DataType(DataType.DateTime)]
    public DateTime CreateDate { get; set; }

    [Required(ErrorMessage = "کاربر گرامی لطفا وضعیت پیغام را مشخص نمائید ")]
    [Display(Name = "وضعیت")]
    public bool IsActive { get; set; }

    [Display(Name = "کد صفحه")]
    public int PageId { get; set; }
    public virtual PageModel PageModel { get; set; }
    }

  2. #2

    نقل قول: ارسال لیستی از مدل ها

    سوال خیلی کلیه !
    مشکل کجاست !؟

  3. #3

    نقل قول: ارسال لیستی از مدل ها

    مشکل اینجاست که: هنگام ارسال اطلاعات به کنترلر، لیستی از داده ها رو نمی فرسته فقط یه مورد ارسال می کنه!

    من کد زیر رو نوشتم:

    کد HTML:
    @model DynamicWebsite.Areas.Admin.Models.Admin_CommentsListModel
    @{
        ViewBag.Title = "NewComments";
        Layout = "~/Areas/Admin/Views/Shared/Simple_MasterPage.cshtml";
    }
    @Html.Partial("_HeaderPartial")
    <div class="custom_table">
        <div class="comment">
            @using (Html.BeginForm())
            {
                Html.ValidationSummary(true);
                foreach (var item in Model.PageModels)
                {
                    var pages = (from n in item.CommentModels
                                 where n.IsActive == false
                                 select n).OrderByDescending(p => p.CreateDate);
                    if (pages.Count() > 0)
                    {
                <table>
                    <tr>
                        <th colspan="9">@Html.DisplayFor(modelItem => item.PageTitle)</th>
                    </tr>
                    <tr>
                        <th colspan="2">@Html.DisplayNameFor(model => model.CommentModel.CreateDate)</th>
                        <th colspan="5">@Html.DisplayNameFor(model => model.CommentModel.CommentAuthor)</th>
                        <th colspan="1">@Html.DisplayNameFor(model => model.CommentModel.IsActive)</th>
                        <th colspan="1">@Html.DisplayFor(model => model._Events)</th>
                    </tr>
                    @foreach (var comment in pages)
                    {
                        <tr>
                            <td colspan="2">@Html.DisplayFor(modelItem => comment.CreateDate)</td>
                            <td colspan="5">@Html.DisplayFor(modelItem => comment.CommentAuthor)</td>
                            <td colspan="1">@Html.EditorFor(model =>model.CommentModel.IsActive)
                                @Html.HiddenFor(modelItem=>comment.CommentId)
                            </td>
                            <td colspan="1">@Html.ActionLink(Model._Edit, "Edit", new { id = comment.CommentId }) |
                                                    @Html.ActionLink(Model._Delete, "Delete", new { id = comment.CommentId })</td>
                        </tr>
                        <tr>
                            <td colspan="9">@Html.DisplayFor(modelItem => comment.CommentContent)</td>
                        </tr>
                    }
                </table>
                
                    }
                }
                <input type="submit" value="@Html.DisplayFor(model => model._Message_6)" />
            }
        </div>
    </div>
    </div>
    این کد کلیه کامنت های تایید نشده رو به ادمین نمایش میده.

    حالا می خوام ادمین کامنت های مورد نظر رو انتخاب کنه یعنی هرکدوم که مورد تاییدش هست رو تیک می زنه بعد روی دکمه تایید موارد انتخاب شده کلیک می کنه.

    تو این کد من commentId و IsActive کلیه کامنت ها رو به کنترلر ارسال می کنم. کنترلر اون هایی که true هستند رو update می کنه.

    حالا: مشکل من اینجاست که فقط مورد اول رو ارسال می کنه. نه همه کانت ها رو.

  4. #4

    نقل قول: ارسال لیستی از مدل ها

    کد مربوط به عملیات post در کنترل مربوطه رو قرار بدید.

  5. #5

    نقل قول: ارسال لیستی از مدل ها

    تابع زیر لیستی از کامنت هارو به View ارسال می کنه


    public ActionResult NewComments()
    {
    if (ModelState.IsValid)
    {
    var item = new Admin_NewCommentsListModel
    {
    _Title_1 = "نظرات تایید نشده",
    _Title_2 = "لیست نظرات",
    _Header = "نظرات تایید نشده",
    _Action_1 = "NewComments",
    _Action_2 = "Index",
    _Message_6 = "تایید موارد انتخاب شده",
    _Edit = "ویرایش",
    PageModels = context.PageModels.Include("CommentModels").Where( p => p.IsActive == true).OrderByDescending(p => p.CreateDate).ToList()
    };
    SetRightMenuModel(ref item);
    return View(item);
    }
    return RedirectToAction("Index");
    }


    تابع post که عملیات تایید رو انجام میده:

    [HttpPost]
    public ActionResult NewComments(Admin_CommentsListModel model)
    {
    if (ModelState.IsValid)
    {
    foreach (var item in model.PageModels)
    foreach (var comment in item.CommentModels)
    if (comment.IsActive)
    SetCommentsIsActive(comment.CommentId);
    }
    return RedirectToAction("Index");
    }
    //================================================== =================================================
    public void SetCommentsIsActive(int id)
    {
    var item = context.CommentModels.Find(id);
    item.IsActive = true;
    context.Entry(item).State = EntityState.Modified;
    context.SaveChanges();
    }

  6. #6

    نقل قول: ارسال لیستی از مدل ها

    بالاخره موفق شدم حل اش کنم

    با استفاده از توضیحاتی که تو این لینک داده شده ما میتونیم با ایجاد IList<> ای از مدل مون اون لیست رو به کنترلر ارسال کنیم و پردازش های لازم رو انجام بدیم.

    برای مثال:

    مدلی به شرح زیر داریم:

    توضیح: این مدل میتونه مدل کامنت های کاربران در انتهای مطالب صفحات باشه


    public class CommentModel
    {
    [Key]
    [Display(Name = "کد")]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption .Identity)]
    public int CommentId { get; set; }

    [Required(ErrorMessage = "کاربر گرامی لطفا نام خود را وارد نمائید ")]
    [Display(Name = "نام")]
    [MaxLength(20, ErrorMessage = "کاربر گرامی حداکثر 20 کاراکتر می توانید وارد کنید")]
    public string CommentAuthor { get; set; }

    [Display(Name = "انتقادها و پیشنهادها:")]
    [DataType(DataType.MultilineText)]
    [Required(ErrorMessage = "کاربر گرامی لطفا انتقادها و پیشنهادهای خود را بنویسید ")]
    [MaxLength(255, ErrorMessage = "کاربر گرامی حداقل 50 کاراکتر و حداکثر 255 کاراکتر می توانید وارد کنید"),MinLength(10)]
    public string CommentContent { get; set; }

    [Display(Name = "تاریخ ارسال")]
    [DataType(DataType.DateTime)]
    public DateTime CreateDate { get; set; }

    [Required(ErrorMessage = "کاربر گرامی لطفا وضعیت پیغام را مشخص نمائید ")]
    [Display(Name = "وضعیت")]
    public bool IsActive { get; set; }

    [Display(Name = "کد صفحه")]
    public int PageId { get; set; }
    public virtual PageModel PageModel { get; set; }
    }


    از این مدل کلاسی بشرح زیر ایجاد میکنیم. با فرض اینکه کلاس مشتق شده از کلاس Admin

    public class Admin_CommentsModel : Admin
    {
    public IList<CommentModel> CommentModels { set; get; }
    }


    حالا به کنترل مربوطه رفته و تابع View اون رو می نویسیم.

    public ActionResult NewComments()
    {
    if (ModelState.IsValid)
    {
    var item = new Admin_CommentsModel
    {
    ...
    CommentModels = context.CommentModels.Where(p => p.IsActive == false).OrderBy(p=>p.PageId).OrderByDescending(p => p.CreateDate).ToList()
    };
    return View(item);
    }
    return RedirectToAction("Index");
    }


    در View مربوطه کد زیر رو می نویسیم:
    کد HTML:
    @model Admin_CommentsListModel
    
                @using (Html.BeginForm())
                {
                    Html.ValidationSummary(true);
                    for(int i=0;i<Model.CommentModels.Count();i++)
                    {
                        @Html.EditorFor(modelItem => Model.CommentModels[i])   
                    }
                    <input type="submit" value="تایید موارد انتخاب شده" />
                }
    بعد کد زیر رو در Post کنترلر مربوطه می نویسیم:

    [HttpPost]
    public ActionResult NewComments(ICollection<CommentModel> CommentModels)
    {
    if (ModelState.IsValid)
    {
    foreach (var item in CommentModels)
    if (item.IsActive)
    Update...
    }
    return RedirectToAction("NewComments");



    موفق باشید

  7. #7

    نقل قول: ارسال لیستی از مدل ها

    نقل قول نوشته شده توسط hakim22 مشاهده تاپیک
    کد مربوط به عملیات post در کنترل مربوطه رو قرار بدید.
    دوست عزیز از شما هم بابت زحماتتون متشکرم

تاپیک های مشابه

  1. پاسخ: 0
    آخرین پست: سه شنبه 09 اسفند 1390, 22:11 عصر
  2. ارسال لیستی از اطلاعات به sql
    نوشته شده توسط Payman62 در بخش T-SQL
    پاسخ: 6
    آخرین پست: یک شنبه 30 مرداد 1390, 03:03 صبح
  3. پاسخ: 0
    آخرین پست: پنج شنبه 12 اسفند 1389, 11:43 صبح
  4. مشکل ارسال ایمیل در سایت
    نوشته شده توسط mahmoodreza در بخش گفتگو با مسئولین سایت، درخواست و پیشنهاد
    پاسخ: 2
    آخرین پست: شنبه 16 فروردین 1382, 14:24 عصر
  5. سیستم ارسال کارت تبریک نوروز طراحی شده با دلفی
    نوشته شده توسط SyntaxCheck در بخش توسعه نرم افزار تحت وب
    پاسخ: 10
    آخرین پست: سه شنبه 12 فروردین 1382, 04:49 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •