给定一个包含验证的表单的用户控件可以完全验证服务器端吗?

时间:2010-04-01 20:19:33

标签: asp.net validation user-controls

我们有一个现有的用户控件,用于为最终用户动态生成Web表单。此表单包括必填字段验证程序,使用服务器端代码和正则表达式验证程序的自定义验证程序。

我们现在需要使用所有这些验证器来验证在使用单独的排序过程时输入了所有需要的数据,这些过程无法以相同的方式验证,但在将其添加到数据库之前具有相同的验证要求

我想使用此用户控件通过传递所有值并检查验证摘要来验证输入。我知道如何执行此操作的唯一方法是将其呈现到客户端的页面并触发表单提交。

有没有办法在服务器端完全填充和验证网络表单?

3 个答案:

答案 0 :(得分:1)

绝对可以创建一个.aspx页面的实例并在运行时调用它,尽管根据你正在做的事情,它可能充满复杂性。这是基本的想法:

Page instance = BuildManager.CreateInstanceFromVirtualPath(
                            "/myPath/myPage.aspx", 
                            typeof(MyPageCodeBehindType)) as Page; 

据推测,现在您可以在其上调用instance.ProcessRequest(HttpContext.Current)并让它通过Page生命周期。同样,您可以检查instance.IsValid并查看您的验证工作是否有效。

我说大概是因为我对这方面的经验很少。试一试 - 可以查看BuildManager课程以获取更多示例。

编辑:看起来你可以这样做:

UserControl instance = (UserControl)BuildManager.CreateInstanceFromVirtualPath(
                            "~/Controls/Somefile.ascx", typeof(UserControl));

答案 1 :(得分:1)

是的,你看过LoadControl吗?

Dim dp As missico_UserControls_DropDownListDeviceProfile = LoadControl("~/missico/UserControls/DropDownListDeviceProfile.ascx")
'Dim dp As missico_UserControls_ComboDeviceProfile = LoadControl("~/missico/UserControls/ComboDeviceProfile.ascx")

Dim DeviceID As Integer
Dim MarketID As Integer = 0

DeviceID = dr("DeviceID").ToString

dp.SelectedValue = ProfileID
dp.DeviceID = DeviceID

dp.ID = "d" & DeviceID & "m" & MarketID

dp.OnClientChange = "pc(this);"

dp.ShowLabel(CBool(gscID = 1))

LoadControl应该适合你。但是,如果用户控件不是为真正的独立操作而设计的,那么您可以创建一个包装用户控件的页面。将服务器传输到页面。让页面填充用户控件,验证它,处理输出,然后转移到确认/错误/原始页面。

我已经使用了这两种技术,但现在找不到服务器转移代码。

答案 2 :(得分:0)

不确定。可以创建用户控件类的实例,通过为每个控件设置.Text字段来填充其字段,在其上调用.Validate(),并检查其isValid()值。

如果这不起作用,如果可行,您可能最好为“单独订购流程”设计单独的验证。您能否详细介绍一下如何实施?