ASP.NET4.5TryUpdateModel不使用母版页在WebForm中选择表单值验证是在页面中执行的,由于某种原因,模型没有获取值,这意味着如果我输入一个好的值,验证触发后,模型会一直返回空,并一遍又一遍地触发验证.如果我将代码放在没有母版页的页面中,它就可以正常工作。我能够想出一个非常简单的例子,老实说,很难相信像MasterPages一样普遍,到目前为止还没有人遇到过这种情况。出于本示例的目的,我将模型嵌入到代码隐藏中,但在外部没有区别。欢迎任何想法。谢谢。–master-Page––WebForm–FirstName:MiddleName:LastName:–代码背后–usingSystem;使用System.Collections.Generic;使用System.Linq;使用System.Web;使用System.Web.UI;使用System.Web.UI.WebControls;使用System.Web.ModelBinding;使用System.ComponentModel.DataAnnotations;publicpartialclasstest3:System.Web.UI.Page{publicclasstestClass2{[Required()][MinLength(2)]publicstringFirstName{get;放;}publicstringMiddleName{get;放;}[Required()][MinLength(2)]publicstringLastName{get;放;}}protectedvoidPage_Load(objectsender,EventArgse){if(Page.IsPostBack){testClass2tc=newtestClass2();如果(TryUpdateModel(tc,newFormValueProvider(ModelBindingExecutionContext))){System.Diagnostics.Debug.WriteLine("test");}}}}问题确实是由母版页的使用引起的。当在数据绑定控件(例如GridView、FormView、Menu等)之外使用时,FormValueProvider期望Request.Form字典中的键与模型对象中的属性同名。如果您仔细查看生成的HTML,您会发现带有母版页的表单中的所有输入标签的名称属性值都设置为类似ctl00$ContentPlaceHolder1$FirstName、ctl00$ContentPlaceHolder1$LastName等的值,而没有母版页窗体的名称属性是完整的,等于控件的ID属性的值。这就是生成UniqueID以避免名称重复的方式(应该避免,因为在Web表单中我们只能有一个表单标签,因此在母版页和表单页上都有具有相同ID的控件)。这就是FormValueProvider获取不到testClass2对象的值的原因,它就是找不到post表单的FirstName、LastName、MiddleName值。我找到了解决办法。可以写一些前端代码将name设置为id,别忘了将ClientIDMode设置为Static以上是C#学习教程:ASP.NET4.5TryUpdateModel不使用母版页在WebForm中选择表单值很有用并且需要了解更多关于C#的学习教程。希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
