簡體   English   中英

從 html 按鈕控件調用服務器端事件

[英]calling server side event from html button control

我正在使用 ASP.Net 創建一個應用程序,其中在 aspx 頁面上有一個 HTML 按鈕。

<input type="submit" id="btnSubmit" runat="server" 
   style="background-image:url(App_Themes/default/Images/quiz_class/btn_submit.jpg);
   width:80px; height:29px;" onserverclick="btnSubmit_ServerClick" />

但是當我點擊按鈕時,它不會調用 aspx.cs 頁面上的 btnSubmit_ServerClick 事件。

我不想使用asp控制按鈕。

請幫忙..

如果您可以通過指定runat="server"將輸入按鈕轉換為服務器端控件,並且您使用的是asp.net ,則可以選擇使用HtmlButton.OnServerClick屬性。

<input id="foo "runat="server" type="button" onserverclick="foo_OnClick" />

這應該工作並在服務器端代碼中調用foo_OnClick 另請注意,基於上面鏈接的Microsoft文檔,您還應該能夠使用HTML 4.0標記。

在您的aspx頁面上,使用常見的嫌疑人定義HTML Button元素:runat,class,title等。

如果此元素是數據綁定控件的一部分(即:網格視圖等),您可能希望使用CommandName和CommandArgument作為屬性。 添加按鈕的內容和結束標記。

<button id="cmdAction" 
    runat="server" onserverclick="cmdAction_Click()" 
    class="Button Styles" 
    title="Does something on the server" 
    <!-- for databound controls -->
    CommandName="cmdname"> 
    CommandArgument="args..."
    >
    <!-- content -->
    <span class="ui-icon ..."></span>
    <span class="push">Click Me</span>
</button>

在頁面后面的代碼中,元素將調用將被定義為元素的ID_Click事件函數的處理程序。

protected void cmdAction_Click(object sender, EventArgs e)
{
: do something.
}

還有其他解決方案,如使用自定義控件等。另請注意,我在VS2K8中的項目中使用此實時。

希望這會有所幫助。 請享用!

完成此任務的最簡單方法是覆蓋RaisePostBackEvent方法。

<input type="button" ID="btnRaisePostBack" runat="server" onclick="raisePostBack();" ... />

在你的JavaScript中:

raisePostBack = function(){
    __doPostBack("<%=btnRaisePostBack.ClientID%>", "");
}

在你的代碼中:

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);

    if (source == btnRaisePostBack)
    {
         //do some logic
    }
}

只需在按鈕點擊事件結束時使用它

protected void btnAddButton_Click(object sender, EventArgs e)
{
   ... save data routin 
     Response.Redirect(Request.Url.AbsoluteUri);
}

您可以使用事件處理程序serverclick,如下所示

// cmdAction是HTML按鈕的id,如下所示

<body>
    <form id="form1" runat="server">
        <button type="submit" id="cmdAction" text="Button1" runat="server">
            Button1
        </button>
    </form>
</body>

// cs代碼

public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
                cmdAction.ServerClick += new EventHandler(submit_click);  
        }

        protected void submit_click(object sender, EventArgs e)
        {
            Response.Write("HTML Server Button Control");
        }
    }

對於嘗試處理復選框的人來說,這些解決方案都不起作用,因為您需要它是 HTML 輸入(而不是 HTML 按鈕)。

一旦您添加 type="checkbox" 后,SPArcheon 的答案就不會起作用,這是.checked運算符在代碼隱藏中工作所需的。 一旦添加type="checkbox" ,HTML 輸入框就沒有OnServerClickServerClickCheckedChanged 您所擁有的只是ServerChanged ,這是無用的,因為它需要刷新整個頁面。

實際上,我不得不使用 CSS 使 HTML 按鈕類似於復選框,使用 Bootstrap 的 btn-outline-secondary 類作為起點。

.btn-checkbox-unchecked {
    padding: .35rem .35rem !important;
    font-size: .875rem !important;
    line-height: .5 !important;
    border-radius: .15rem !important;
    border-width: .20em !important;
}

.btn-checkbox-checked {
    padding: .1rem .1rem !important;
    font-size: .6rem !important;
    line-height: .5 !important;
    border-radius: .15rem !important;
    border-width: .20em !important;
    border-color: #0060df !important;
    background-color: #0060df !important;
}

    .btn-checkbox:hover {
        border-color: #676774 !important;
        background-color: #0250BB !important;
    }

在aspx中:

<button class="btn btn-xs btn-outline-secondary btn-checkbox" id="btnFakeCheckbox" runat="server" clientidmode="static" autopostback="true" data-bs-toggle="button" autocomplete="off"></button>

然后在您的代碼隱藏中,您可以相應地設置屬性(類):

btnFakeCheckbox.Attributes.Add("class", "btn btn-xs btn-secondary btn-checkbox-checked active")
btnFakeCheckbox.Attributes("aria-pressed") = "true"
btnFakeCheckbox.InnerHtml = "<i class='fas fa-check'></i>"

(注意最后一行的字體真棒檢查圖標,您必須將其包含在您的 aspx 中)

如果有人有 Bootstrap 5 切換開關的解決方案,請告訴我。

請遵循以下教程: http//decoding.wordpress.com/2008/11/14/aspnet-how-to-call-a-server-side-method-from-client-side-javascript/

在旁注:ASP.NET生成一個客戶端javascript函數,您可以從您自己的函數調用它來執行您想要的回發。

- 有關劫持回發事件的更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM