alireza_rashvand
شنبه 25 مرداد 1393, 19:19 عصر
سلام
در قسمتی از پروژه (اموزشی ام) ام می خوام نظر مخاطبین را ذیل پست ثبت کنم.
ساده ترین راه:
1- ActionLink
استفاده از ActionLink به عنوان لینک ثبت نظر,
@Html.ActionLink("ثبت نظر", "InsertComment", "Comments", new { id = @Model.Post.Id }, null);
2- Controller
ایجاد یک کنترلر (Comments)
3- ActionResult
ساخت اکشن (InsertComment)
[HttpPost]
public ActionResult InsertComment(Comment _comment, int id)
{
if (this.ModelState.IsValid)
{
using (var db = new Context())
{
db.Comments.Add(new Comment
{
Name = _comment.Name,
Content = _comment.Content,
PostId = id,
DateCreated = DateTime.Now
});
db.SaveChanges();
ViewBag.Message = "با موفقیت ثبت شد";
}
return RedirectToAction("show", "Posts", new { id });
}
return RedirectToAction("InsertComment");
}
4- Add View
5- Model Class
6- Scaffold : Create
@model Projects.Models.Comment
@{
ViewBag.Title = "InsertComment";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ثبت نظر</legend>
<div >
@Html.LabelFor(model => model.Name)
</div>
<div >
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div >
@Html.LabelFor(model => model.Content)
</div>
<div >
@Html.TextAreaFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
<p>
<input type="submit" value="ثبت نظر" />
</p>
</fieldset>
}
کلیک روی دکمه ثبت نظر , تمام!
حالا قصد دارم فیلدست رو در داخل نمایش پست داشته باشم یعنی زیر خود پست ثبت نظر کنم بدون اینکه برم به صفحه ای دیگر برگردم.
برای این کار به جای استفاده از
@Html.ActionLink("ثبت نظر", "InsertComment", "Comments", new { id = @Model.Post.Id }, null);
از Partial استفاده کردم
@Html.Partial("_InsertComment",@Model.Comment);
خود Partial _InsertComment رو هم به این صورت نوشتم
@model Projects.ViewModels.PostCommentsViewModel
@using (Html.BeginForm(actionName: "InsertComment", controllerName: "Posts", routeValues: new { id = @Model.Post.Id }))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<fieldset>
<div>
@Html.LabelFor(model => model.Comment.Name)
</div>
<div>
@Html.TextBoxFor(model => model.Comment.Name)
@Html.ValidationMessageFor(model => model.Comment.Name)
</div>
<div>
@Html.LabelFor(model => model.Comment.Content)
</div>
<div>
@Html.TextAreaFor(model => model.Comment.Content)
@Html.ValidationMessageFor(model => model.Comment.Content)
</div>
<p>
<input type="submit" value="ثبت نظر" />
</p>
</fieldset>
}
PostCommentsViewModel رو دیگه شرح نمی دم که طولانی نشه , این ویومدل موارد مورد نیاز نمایش یک پست همراه با نظراتش رو در اختیار قرار میده (توضیحات بیشتر (http://barnamenevis.org/showthread.php?461129-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D9%86%D8%B8%D8%B1%D9%87%D8%A7%DB%8C-%D9%BE%D8%B3%D8%AA&p=2066224&viewfull=1#post2066224) )
در _InsertComment کنترلر برگشتی رو به جای کنترلر دیگر به خود پست تغییر دادم و InsertComment که در شماره 3 دیدید رو داخل کنترل پست نوشتم.
مشکلی که الان دارم اینکه حالا که فیلدست ثبت نظر زیر پست قرار دراه _commentرا null برمی گردونه و نکته بعدی اینکه اگر بخواهم خطاها رو کنترل کنم و فیلد ها خالی نشند return اکشن در حالت this.ModelState.IsValid چی باید باشه
امیدوارم با اینکه طولانی شد و نتونسته باشم مشکل رو خوب توضیح داده باشم.
در قسمتی از پروژه (اموزشی ام) ام می خوام نظر مخاطبین را ذیل پست ثبت کنم.
ساده ترین راه:
1- ActionLink
استفاده از ActionLink به عنوان لینک ثبت نظر,
@Html.ActionLink("ثبت نظر", "InsertComment", "Comments", new { id = @Model.Post.Id }, null);
2- Controller
ایجاد یک کنترلر (Comments)
3- ActionResult
ساخت اکشن (InsertComment)
[HttpPost]
public ActionResult InsertComment(Comment _comment, int id)
{
if (this.ModelState.IsValid)
{
using (var db = new Context())
{
db.Comments.Add(new Comment
{
Name = _comment.Name,
Content = _comment.Content,
PostId = id,
DateCreated = DateTime.Now
});
db.SaveChanges();
ViewBag.Message = "با موفقیت ثبت شد";
}
return RedirectToAction("show", "Posts", new { id });
}
return RedirectToAction("InsertComment");
}
4- Add View
5- Model Class
6- Scaffold : Create
@model Projects.Models.Comment
@{
ViewBag.Title = "InsertComment";
}
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ثبت نظر</legend>
<div >
@Html.LabelFor(model => model.Name)
</div>
<div >
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<div >
@Html.LabelFor(model => model.Content)
</div>
<div >
@Html.TextAreaFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
<p>
<input type="submit" value="ثبت نظر" />
</p>
</fieldset>
}
کلیک روی دکمه ثبت نظر , تمام!
حالا قصد دارم فیلدست رو در داخل نمایش پست داشته باشم یعنی زیر خود پست ثبت نظر کنم بدون اینکه برم به صفحه ای دیگر برگردم.
برای این کار به جای استفاده از
@Html.ActionLink("ثبت نظر", "InsertComment", "Comments", new { id = @Model.Post.Id }, null);
از Partial استفاده کردم
@Html.Partial("_InsertComment",@Model.Comment);
خود Partial _InsertComment رو هم به این صورت نوشتم
@model Projects.ViewModels.PostCommentsViewModel
@using (Html.BeginForm(actionName: "InsertComment", controllerName: "Posts", routeValues: new { id = @Model.Post.Id }))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<fieldset>
<div>
@Html.LabelFor(model => model.Comment.Name)
</div>
<div>
@Html.TextBoxFor(model => model.Comment.Name)
@Html.ValidationMessageFor(model => model.Comment.Name)
</div>
<div>
@Html.LabelFor(model => model.Comment.Content)
</div>
<div>
@Html.TextAreaFor(model => model.Comment.Content)
@Html.ValidationMessageFor(model => model.Comment.Content)
</div>
<p>
<input type="submit" value="ثبت نظر" />
</p>
</fieldset>
}
PostCommentsViewModel رو دیگه شرح نمی دم که طولانی نشه , این ویومدل موارد مورد نیاز نمایش یک پست همراه با نظراتش رو در اختیار قرار میده (توضیحات بیشتر (http://barnamenevis.org/showthread.php?461129-%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D9%86%D8%B8%D8%B1%D9%87%D8%A7%DB%8C-%D9%BE%D8%B3%D8%AA&p=2066224&viewfull=1#post2066224) )
در _InsertComment کنترلر برگشتی رو به جای کنترلر دیگر به خود پست تغییر دادم و InsertComment که در شماره 3 دیدید رو داخل کنترل پست نوشتم.
مشکلی که الان دارم اینکه حالا که فیلدست ثبت نظر زیر پست قرار دراه _commentرا null برمی گردونه و نکته بعدی اینکه اگر بخواهم خطاها رو کنترل کنم و فیلد ها خالی نشند return اکشن در حالت this.ModelState.IsValid چی باید باشه
امیدوارم با اینکه طولانی شد و نتونسته باشم مشکل رو خوب توضیح داده باشم.