我为On-type事件创建了一个通用事件处理程序。
function OnHandler() {
$('#hfOnHandlerControl').val(event.target.id);
$('#hfOnHandlerEvent').val(event.type);
$('#hfOnHandlerArgs').val(null);
var argstring = "";
if (arguments.length > 0) {
for (index = 0; index < arguments.length; ++index) {
argstring += `"${arguments[index]}"`;
argstring += (index+1<arguments.length)? "||#||" : "";
}
// alert(argstring);
$('#hfOnHandlerArgs').val(argstring);
}
$('#btnOnHandler').attr('CommandName', event.type);
$('#btnOnHandler').attr('CommandArgument',event.target.id + '||#||' + argstring);
$("#btnOnHandler").click();
};
它被称为这样,例如:
<asp:TextBox runat="server" ID="tbWebsite" Width="223px" onblur="OnHandler('xxx','p2','p3');">
javascript&#34;点击&#34;中的onclick功能这个按钮:
<asp:Button ID="btnOnHandler" runat="server" ClientIDMode="Static" Text="" OnCommand="btnOnHandler_OnCommand" CausesValidation="False"/>
反过来执行此代码隐藏:
protected void btnOnHandler_OnCommand(Object sender, CommandEventArgs e)
{
var ctl = FindControlByClientId(Page,hfOnHandlerControl.Value).ID;
var action = hfOnHandlerEvent.Value;
var args = hfOnHandlerArgs.Value;
var theMethod = this.GetType().GetMethod($"Handler_{ctl}On{action}");
Object[] parametersArray = null;
if (!String.IsNullOrEmpty(args))
{
parametersArray = args.Split(new String[]{"||#||"}, StringSplitOptions.None).Cast<Object>().ToArray();
}
theMethod.Invoke(this, parametersArray);
}
调用类似
的内容 public void Handler_tbWebsiteOnblur(String p1,String p2,String p3)
{
var pai = new PortalAliasController().GetPortalAlias(@"store." + tbWebsite.Text); //returns PortalAliasInfo
if (pai != null)
{
//Alias already exists. Let's have a hidden status box that gets displayed
tbWebsite.Focus();
lblWebsiteError.Text = @"Website Already Exists...";
lblWebsiteError.Visible = true;
btnSubmit.Enabled = false;
}
else
{
lblWebsiteError.Visible = false;
btnSubmit.Enabled = true;
tbCompany.Focus();
}
}
我的问题:
如何避免使用隐藏字段,而是通过CommandName和CommandArgument传递所有内容?您可以看到我尝试添加属性和值,但无论如何,&#34; e&#34;在
btnOnHandler_OnCommand(Object sender,CommandEventArgs e)
总是空的。
我已经看过使用ViewState和已经尝试过的属性添加的解决方案,但没有任何效果。我错过了什么?