You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用.NET内联表达式实现RequiredFieldValidator动态错误提示?

解决RequiredFieldValidator动态错误提示的问题

你现在遇到的核心问题是用错了表达式语法——<%$ %>是专门用来读取资源文件、连接字符串这类配置项的,没法直接获取DropDownList的选中文本,所以你的错误提示不会动态更新。下面给你几个可行的解决方案,按需选择:

方案1:服务器端数据绑定(适合需要回发的场景)

用<%# %>数据绑定表达式来获取DropDownList的选中项文本,配合后台代码触发绑定:

前端代码

<asp:DropDownList ID="drpSearchField" runat="server" 
    CssClass="btn btn-outline-secondary"
    AutoPostBack="true"
    OnSelectedIndexChanged="drpSearchField_SelectedIndexChanged">
    <asp:ListItem Text="First Name" Value="FirstName"></asp:ListItem>
    <asp:ListItem Text="Last Name" Value="LastName"></asp:ListItem>
    <asp:ListItem Text="Phone Number" Value="PhoneNumber"></asp:ListItem>
</asp:DropDownList>

<asp:RequiredFieldValidator ID="rfvSearch" runat="server" 
    ControlToValidate="txtSearchData" 
    EnableClientScript="true" 
    ErrorMessage='<%# drpSearchField.SelectedItem.Text + " is required." %>' 
    ForeColor="Red">
</asp:RequiredFieldValidator>

后台代码(CodeBehind)

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 页面首次加载时绑定一次,初始化错误提示
        this.DataBind();
    }
}

protected void drpSearchField_SelectedIndexChanged(object sender, EventArgs e)
{
    // 下拉选项变化时,重新绑定更新错误提示
    this.DataBind();
}

方案2:客户端脚本动态修改(无回发,体验更好)

如果不想让页面回发刷新,用JavaScript监听下拉菜单的变化,直接在客户端修改验证器的错误提示:

前端代码

<asp:DropDownList ID="drpSearchField" runat="server" 
    CssClass="btn btn-outline-secondary"
    ClientIDMode="Static">
    <asp:ListItem Text="First Name" Value="FirstName"></asp:ListItem>
    <asp:ListItem Text="Last Name" Value="LastName"></asp:ListItem>
    <asp:ListItem Text="Phone Number" Value="PhoneNumber"></asp:ListItem>
</asp:DropDownList>

<asp:RequiredFieldValidator ID="rfvSearch" runat="server" 
    ControlToValidate="txtSearchData" 
    EnableClientScript="true" 
    ErrorMessage="First Name is required." 
    ForeColor="Red"
    ClientIDMode="Static">
</asp:RequiredFieldValidator>

<script type="text/javascript">
    // 更新验证器错误信息的函数
    function updateValidatorMsg() {
        const dropdown = document.getElementById('drpSearchField');
        const selectedText = dropdown.options[dropdown.selectedIndex].text;
        const validator = document.getElementById('rfvSearch');
        
        // 修改验证器显示的文本
        validator.textContent = `${selectedText} is required.`;
        // 同步修改ASP.NET验证框架的隐藏提示(确保客户端验证生效)
        validator.setAttribute('data-valmsg-replace', 'true');
    }

    // 页面加载完成后初始化一次
    window.addEventListener('load', updateValidatorMsg);
    // 监听下拉菜单变化事件
    document.getElementById('drpSearchField').addEventListener('change', updateValidatorMsg);
</script>

方案3:后台直接赋值(最简单的回发方案)

直接在下拉菜单的选择变化事件里,给验证器的ErrorMessage属性赋值:

前端代码

<asp:DropDownList ID="drpSearchField" runat="server" 
    CssClass="btn btn-outline-secondary"
    AutoPostBack="true"
    OnSelectedIndexChanged="drpSearchField_SelectedIndexChanged">
    <asp:ListItem Text="First Name" Value="FirstName"></asp:ListItem>
    <asp:ListItem Text="Last Name" Value="LastName"></asp:ListItem>
    <asp:ListItem Text="Phone Number" Value="PhoneNumber"></asp:ListItem>
</asp:DropDownList>

<asp:RequiredFieldValidator ID="rfvSearch" runat="server" 
    ControlToValidate="txtSearchData" 
    EnableClientScript="true" 
    ForeColor="Red">
</asp:RequiredFieldValidator>

后台代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 初始化错误提示
        rfvSearch.ErrorMessage = $"{drpSearchField.SelectedItem.Text} is required.";
    }
}

protected void drpSearchField_SelectedIndexChanged(object sender, EventArgs e)
{
    // 更新错误提示
    rfvSearch.ErrorMessage = $"{drpSearchField.SelectedItem.Text} is required.";
}

内容的提问来源于stack exchange,提问作者sruffatti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:52:33