gpt4 book ai didi

回发时的 ASP.NET 数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 06:50:25 24 4
gpt4 key购买 nike

处理 ASP.NET 4.0 项目,该项目使用用户控件根据存储在数据库中的定义动态生成表单。一个表单字段如下所示:

<usc:RefControl ID="ctrlUser1" 
ReferenceFieldId='product.user1'
ValidationFormat="^\d+\.?\d{0,2}$"
runat="server"/>

在幕后,控件根据 RefControl.ValidationFormat 属性发出一个 RegularExpressionValidator。

这很好用,但问题是这种架构只允许我们使用正则表达式进行验证。现在我需要根据用户的偏好(不依赖于他们的 UICulture)添加日期格式验证。

不愿重构整个用户控件设置,我需要能够将动态正则表达式模式传递给 ValidationFormat 属性。目前我正在使用数据绑定(bind)表达式将属性绑定(bind)到页面实例方法:
<usc:RefControl ID="ctrlUser2" 
ReferenceFieldId='product.user2'
ValidationFormat="<%# GetUserDateValidationFormat()%>"
runat="server"/>

后面的代码:
/// <summary>
/// Returns a regular expression that validates the current user's date format
/// </summary>
public string GetUserDateValidationFormat()
{
//...
}

在第一页加载时工作正常,但在随后的回发中验证不起作用。我 问题是数据绑定(bind)表达式根本不计算,但我不确定我理解为什么。我在 Page_Init 中调用 Page.DataBind() 是否是 Page.IsPostBack ,所以这不应该工作吗?

如果您看到我在叫错树,那么也欢迎任何针对同一问题的替代解决方案。

编辑

设法解决了这个问题。问题在于 ASP.NET 页面生命周期在页面自身事件之前调用用户控件事件的方式。在页面上的数据绑定(bind)发生之前,控件值被初始化。

因为我仍然需要在 Page_Load 之前进行控件初始化以将控件订阅到 View 状态,所以我只是将初始化逻辑移动到 Page.InitComplete 事件,以便可以首先调用对 Page.DataBind() 的调用。
    protected void Page_Init(object sender, EventArgs e)
{
Page.InitComplete += new EventHandler(Page_InitComplete);
}

所以事件树变成
  • 用户控制 Page_Init => Hook InitComplete 处理程序
  • Page (aspx) Page_Init => 绑定(bind)数据
  • 用户控件Page_InitComplete => 初始化控件
  • 最佳答案

    不能只在 Page_Load() 中设置属性吗?

    public void Page_Load(...)
    {
    ctrlUser1.ValidationFormat = GetUserDateValidationFormat();
    // do whatever stuff you do
    }

    关于回发时的 ASP.NET 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201600/

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