Alex Rivera | Logout

ASP.NET MVC 3 Model-binding and form fields

Asked 2011-03-17T16:16:37.577
9

I have an entity called Domain.Models.BlogPost which contains the following properties:

  • PostID
  • Title
  • Author
  • PostedDate
  • Body

I also have an entity called Domain.Models.PostComment which contains the following properties:

  • CommentID
  • PostID
  • Author
  • Email
  • Website
  • Body

BlogPost contains many PostComments. A one to many relationship.

Now I have a view like this (separated comment form from blog post code via html comment):

@model Domain.Models.BlogPost
@using Domain.Models;
@{
    ViewBag.Title = "Post";
}
<div class="postTitle">@Model.Title</div>
<div class="subInfo">
    Posted by @Model.Author on @Model.PostedDate.ToString("D")
</div>
<div class="postBody">
    @Html.Markdown(Model.Body)
</div>
<br />
@Model.PostComments.Count Comment(s).
<div class="comments">
@foreach (PostComment postComment in Model.PostComments)
{
    Html.RenderPartial("PostComment", postComment);
}
</div>

<!-- BELOW IS THE ADD COMMENT FORM -->

<div id="addComment">
@using (Html.BeginForm("AddComment", "Blog"))
{
    <text>
    @Html.Hidden("PostID", Model.PostID)<br />
    Name: @Html.TextBox("Author")<br />
    Email: @Html.TextBox("Email")<br />
    Website: @Html.TextBox("Website")<br />
    Body: @Html.TextArea("Body")<br />
    <input type="submit" value = "Add Comment" />
    </text>
}
</div>
@Html.ActionLink("Add Comment", "AddComment")

The problem is that because the comment form uses @Html.TextBox("Author") and @Html.TextBox("Body"), they are populated with data from the model, which also contains properties Author and Body. Any suggestions on how to fix this so these fields don't get v

Edit
Report

1 Answer

1

Use ASP NET MVC templates so you have full control over what gets populated and it is type-safe.

So you would create an .ascx template which takes a strongly typed Comment. In your model, you leave an empty one in there.

answered 2011-03-17T16:22:50.927

Your Answer