ASP.Net在运行时将CommandArgument和CommandName添加到按钮

时间:2017-03-03 21:24:38

标签: c# jquery asp.net button arguments

我为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和已经尝试过的属性添加的解决方案,但没有任何效果。我错过了什么?

0 个答案:

没有答案