使用服务器标记在 onblur asp.net 文本框中分配隐藏字段值

问题描述 投票:0回答:1

使用服务器标记,我必须将隐藏字段的值赋予文本框 onblur 事件内联中的 javascript 方法。

                        <asp:HiddenField ID="hdnMaxLen" runat="server" Value="10" />

                        <asp:TextBox ID="txtTargetForBelow6" runat="server" MaxLength="10"
                        onkeyup="return FnAlert(this,"+ <%# hdnMaxLen.Value %> +");"
                        CssClass="form-control" AutoCompleteType="None" autocomplete="off"></asp:TextBox>

它显示了类似的错误

The server tag is not well formed.
asp.net
1个回答
0
投票

好的,这里有几个问题。

首先,服务器端表达式要使用“=”符号,而不是“#”(井号)。

接下来,本机服务器控件不能使用也不能拥有服务器端表达式!

您肯定可以在 GridView、ListView、Repeater 等内部使用绑定表达式。

因此,对于按钮行单击,我可能会说在 GridView 中执行此操作:

                <asp:TemplateField HeaderText="Edit" ItemStyle-HorizontalAlign="Center"
                    ItemStyle-Width="140px">
                    <ItemTemplate>
                        <asp:ImageButton ID="cmdEdit" runat="server"
                            ImageUrl="~/Content/edit2.png"
                            Width="48px"
                            Height="40px"
                            OnClick="cmdEdit_Click"
                            Style="margin-left: 15px" 
                            HotelName='<%# Eval("HotelName") %>'
                            PKID = '<%# Eval("ID") %>'
                            />
                    </ItemTemplate>
                </asp:TemplateField>

因此,请注意我如何能够自由地将自定义属性添加到按钮(或本例中的图像按钮)。然后在代码后面,我可以这样去:

Protected Sub cmdEdit_Click(sender As Object, e As ImageClickEventArgs)

    Dim btn As ImageButton = sender
    Dim gRow As GridViewRow = btn.NamingContainer  ' Get current grid view row

    Debug.Print(btn.Attributes("HotelName"))
    Debug.Print(btn.Attributes("PKID"))

但是,对于这样的服务器端控件,我仍然无法使用“<%= %>”表达式。

因此,将此类代码移至服务器端。

因此:

        <asp:HiddenField ID="hdnMaxLen" runat="server" Value="10" />

        <asp:TextBox ID="txtTargetForBelow6" runat="server" MaxLength="10"

        CssClass="form-control" AutoCompleteType="None" autocomplete="off"></asp:TextBox>

        <script>

            function FnAlert(tbox, maxlen) {

                alert("Max len value passed = " + maxl)

            }

        </script>

现在在页面加载事件中,您可以添加客户端代码。

    protected void Page_Load(object sender, EventArgs e)
    {
        txtTargetForBelow6.Attributes.Add("onkeyup", $"FnAlert(this,{hdnMaxLen.Value})");
    }

您可能可以使用 jQuery 表达式,但您不能为服务器端控件添加或使用服务器端表达式 - 这是不允许的,但在我能想到的几乎所有情况下,这都不是问题,因为这样的代码可以在服务器端针对此类服务器端控件完成。

© www.soinside.com 2019 - 2024. All rights reserved.