使用服务器标记,我必须将隐藏字段的值赋予文本框 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.
好的,这里有几个问题。
首先,服务器端表达式要使用“=”符号,而不是“#”(井号)。
接下来,本机服务器控件不能使用也不能拥有服务器端表达式!
您肯定可以在 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 表达式,但您不能为服务器端控件添加或使用服务器端表达式 - 这是不允许的,但在我能想到的几乎所有情况下,这都不是问题,因为这样的代码可以在服务器端针对此类服务器端控件完成。