gpt4 book ai didi

c# - ASP.NET MVC 3 模型绑定(bind)和表单字段

转载 作者:太空狗 更新时间:2023-10-29 19:26:53 24 4
gpt4 key购买 nike

我有一个名为 Domain.Models.BlogPost 的实体,它包含以下属性:

  • 帖子编号
  • 职位
  • 作者
  • 发布日期
  • 正文

我还有一个名为 Domain.Models.PostComment 的实体,它包含以下属性:

  • 评论ID
  • 帖子ID
  • 作者
  • 电子邮件
  • 网站
  • 正文

BlogPost 包含许多 PostComments。一对多关系。

现在我有这样的 View (通过 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")

问题是因为评论表单使用了 @Html.TextBox("Author")@Html.TextBox("Body"),所以它们填充了来自模型的数据,其中还包含属性 AuthorBody。关于如何解决此问题以便这些字段在页面加载时不会获取值的任何建议?

我还尝试创建一个 BlogPostViewModel 并将其设置为 View 的模型,并使用我的实际模型分配 BlogPost 属性:

public class BlogPostViewModel
{
public BlogPost BlogPost { get; set; }
public PostComment NewComment { get; set; }
}

然后我做了 @Html.TextBoxFor(x => x.NewComment.Author) 但是当表单发布到这个操作方法时:

public ActionResult AddComment(PostComment postComment)
{
// ...
}

postComment 没有绑定(bind)到表单值:/

最佳答案

您可以重命名 AddComment 中的字段部分不与模型中命名的属性冲突,或者您可以使用不同的重载 Html.TextBox 覆盖 View 中的值This overload of TextBox takes a value :

value (Type: System.Object)
The value of the text input element. If this value is null, the value of the element is retrieved from the ViewDataDictionary object. If no value exists there, the value is retrieved from the ModelStateDictionary object.


更新:由于您将“NewComment”添加为属性并以这种方式解决了属性命名冲突,因此将 PostComment 而不是 POST 上的整个 View 模型绑定(bind)到操作所需要做的就是指示模型将使用前缀的 Binder 。这是使用 BindAttribute 完成的.

public ActionResult AddComment([Bind(Prefix = "NewComment")] PostComment postComment)

关于c# - ASP.NET MVC 3 模型绑定(bind)和表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com