当前位置: 首页 > 编程语言 > C#

ASP.NETMVC3模型绑定和表单字段分享

时间:2023-04-10 11:46:44 C#

ASP.NETMVC3模型绑定和表单字段我有一个名为Domain.Models.BlogPost的实体,它包含以下属性:我也有一个实体称为Domain.Models.PostComment,其中包含以下属性:BlogPost包含许多PostComments。一对多关系。现在我有这样的观点(通过html评论将评论表单与博客文章代码分开):@modelDomain.Models.BlogPost@usingDomain.Models;@{ViewBag.Title="帖子";}@Model.Title@Model.Author在@Model.PostedDate.ToString("D")@Html.Markdown(Model.Body)@Model.PostComments.Count发表评论。@foreach(Model.PostComments中的PostCommentpostComment){Html。RenderPartial("PostComment",postComment);}@using(Html.BeginForm("AddComment","Blog")){@Html.Hidden("PostID",Model.PostID)姓名:@Html.TextBox("Author")电子邮件:@Html.TextBox("Email")网站:@Html.TextBox("Website")正文:@Html.TextArea("Body")}@Html.ActionLink("AddComment","AddComment")问题是,因为带注释的表单使用@Html.TextBox("Author")和@Html.TextBox("Body"),它们填充了来自模型的数据,其中还包含属性Author和Body。关于如何解决此问题以使这些字段不会在页面加载时获取值的任何建议?我还尝试创建一个BlogPostViewModel并将其设置为视图模型,并使用我的实际模型分配BlogPost属性:publicclassBlogPostViewModel{publicBlogPostBlogPost{get;放;}publicPostCommentNewComment{get;放;然后我做了@Html.TextBoxFor(x=>x.NewComment.Author)但是当表单发布到这个操作方法时:publicActionResultAddComment(PostCommentpostComment){//...}postComment没有绑定到表单value:/你可以把AddComment部分的字段重命名为不与Model中指定的属性冲突的字段,视图中的值也可以使用不同的重载Html.TextBox这种重载接受一个值:value(type:System.Object)文本输入元素的值。如果此值为null,则从ViewDataDictionary对象中检索元素的值。如果那里不存在该值,则从ModelStateDictionary对象中检索它。更新:由于您将“NewComment”添加为属性并以这种方式解决了属性命名冲突,因此将PostComment而不是POST上的整个视图模型绑定到操作所需要做的就是指示模型绑定器使用前缀.这是使用BindAttribute完成的。publicActionResultAddComment([Bind(Prefix="NewComment")]PostCommentpostComment)使用ASPNETMVC模板,这样您就可以完全控制填充的内容,并且它是类型安全的。因此,您将创建一个采用强类型注释的.ascx模板。在您的模型中,您留空。TextBox上是否有重载值?可以通过string.Empty...以上就是《C#学习教程:ASP.NETMVC3模型绑定与表单域共享》的全部内容。如果对您有用,需要了解更多C#学习教程,希望您多多关注—本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:

猜你喜欢