Tengo una entidad llamada Domain.Models.BlogPost
que contiene las siguientes propiedades:ASP.NET MVC 3 campos-modelo de unión y forman
- postID
- Título
- Autor
- PostedDate
- cuerpo
También tengo una entidad llamada Domain.Models.PostComment
que contiene las siguientes propiedades:
- CommentID
- PostID
- Autor
- correo electrónico
- sitio web
- cuerpo
BlogPost
contiene muchos PostComments
. Una relación de uno a muchos.
ahora tengo una vista como esta (formulario de comentarios separados de código de entrada de blog a través de comentario HTML):
@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")
El problema es que debido a que el formulario de comentarios utiliza @Html.TextBox("Author")
y @Html.TextBox("Body")
, que se rellena con datos de el modelo, que también contiene las propiedades Author
y Body
. ¿Alguna sugerencia sobre cómo solucionar esto para que estos campos no obtengan valores cuando se carga la página?
También probé la creación de un BlogPostViewModel
y establecer que a medida que el modelo de la vista y la asignación de la propiedad BlogPost
con mi modelo real:
public class BlogPostViewModel
{
public BlogPost BlogPost { get; set; }
public PostComment NewComment { get; set; }
}
luego hice @Html.TextBoxFor(x => x.NewComment.Author)
pero cuando el formulario enviado a este método de acción:
public ActionResult AddComment(PostComment postComment)
{
// ...
}
postComment
no se unió a los valores de la forma:/
Este es un hecho desagradable del encuadernador de modelo predeterminado. He golpeado esto algunas veces. Mi mejor solución ha sido agregar [Bind (Exclude = "Author, Body")] a la acción y luego arreglar el snafu manualmente. Me encantaría escuchar un mejor enfoque. –
Me encantaría escuchar un mejor enfoque también. – Chev
Vio su actualización, intente vinculante según el prefijo NewComment. es decir, poner [Bind (Prefix = "NewComment")] antes del parámetro PostComment postComment –