PDA

View Full Version : نحوه عملکرد Model Binding



مهدی هادیان2
دوشنبه 21 بهمن 1392, 14:20 عصر
بسم الله الرحمن الرحیم
با سلام
در پروژه ای که کار می کنم هر کامننت مربوط به یک پست می باشد.
حالا می خوام هر پستی که ایجاد میشود بتوان براش کامنت گذاشت.
از ویوی پست به شکل زیر به کنترلر کامنت میرم:
@Html.ActionLink("Comment","Create","Comment",new {id=item.PostID},null)

حالا در کنترلر کامنت پست مورد نظر رو پیدا می کنم:
public ActionResult Create(long id=0)
{
Post post = db.Posts.Find(id);
Comment comment=new Comment();
comment.Post = post;
//ViewBag.Title = post.Title;
//ViewBag.PostID = post.PostID;
ViewBag.ParentComment_CommentID = new SelectList(db.Comments, "CommentID", "Content");
//ViewBag.CommentWriterID = new SelectList(db.CommentWriters, "CommentWriterID", "Email");
//ViewBag.PostID = new SelectList(db.Posts, "PostID", "Title");
return View();
}
در ویوی مورد نظر قصد دارم از پراپرتی های پست استفاده کنم ولی مدل بایدینگ یاری نمی کنه:
@using System.Web.UI.WebControls
@model MVC2CMS.Models.Comment

@{
ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>

<legend>Comment</legend>

@*Call Partial View CommentWriter*@
@Html.Partial("_Create")

@*<div class="editor-label">
@Html.LabelFor(model => model.PostID, "Post")
</div>
<div class="editor-field">
@Html.DropDownList("PostID", String.Empty)
@Html.ValidationMessageFor(model => model.PostID)
</div>*@
<div class="editor-field">
@Html.Hidden("PostID")
</div>

<div class="editor-label">
@Html.LabelFor(model => model.Post.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Post.Title)
@Html.ValidationMessageFor(model => model.Post.Title)
</div>

با سپاس فراوان

hakim22
دوشنبه 21 بهمن 1392, 20:56 عصر
در کنترلر :

return View(comment);

مهدی هادیان2
سه شنبه 22 بهمن 1392, 15:58 عصر
بسم الله الرحمن الرحیم

در کنترلر :

return View(comment);

با سلام
از پاسختون ممنون
الحمدلله مسئله ای که عرض کردم حل شد ولی مسئله جدیدی ایجاد شد
به کد @Html.Partial("_Create")

خطای زیر رو میده:
The model item passed into the dictionary is of type 'MVC2CMS.Models.Comment', but this dictionary requires a model item of type 'MVC2CMS.Models.CommentWriter'.
ویوی _Create:
@model MVC2CMS.Models.CommentWriter

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

<fieldset>
<legend>CommentWriter</legend>

<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
قبل از return View(comment); به خوبی ویوی مربوطه رو رندر میکرد.
با سپاس

hakim22
سه شنبه 22 بهمن 1392, 19:33 عصر
چیزی که به ویو ارسال میکنید باید از جنس مدلی باشد که در بالای هر ویو تعریف میشود شما سعی دارید مدلی از نوع comment رو به ویویی که باشی CommentWriter کار میکند ارسال کنید

مهدی هادیان2
سه شنبه 22 بهمن 1392, 22:15 عصر
بسم الله الرحمن الرحیم

چیزی که به ویو ارسال میکنید باید از جنس مدلی باشد که در بالای هر ویو تعریف میشود شما سعی دارید مدلی از نوع comment رو به ویویی که باشی CommentWriter کار میکند ارسال کنید
با سلام
الحمدلله مسئله حل شد.
از پیگیریتون سپاسگزارم
با سپاس