【问题标题】:link button click not getting fired链接按钮点击没有被触发
【发布时间】:2013-03-30 16:49:28
【问题描述】:

对不起,我重复这个问题。相反,我不得不重复一遍。上次我发这个,我没有得到答案。我google了3个多小时,找不到答案。这是链接按钮和模式弹出窗口的 html。链接按钮位于选项卡面板内/上,并且自动回发设置为 true。

<asp:LinkButton ID="lnkAddNewAddress" runat="server" OnClick="lnkAddNewAddress_Click">Click Here To Add New Address</asp:LinkButton>
                                        <asp:ModalPopupExtender ID="lnkAddNewAddress_ModalPopupExtender" runat="server" BackgroundCssClass="modalBackground"
                                            DynamicServicePath="" Enabled="True" PopupControlID="pnlMyAddressBook" TargetControlID="lnkAddNewAddress"
                                            ViewStateMode="Enabled" >
                                        </asp:ModalPopupExtender>

我希望链接按钮的 clickevent 不会发生。但是,单击链接确实会打开模态弹出扩展器(这也是我想要的)......我如何进入点击事件。我知道这里避免了回发,因为可能是模态弹出窗口......但我没有解决方案......

保存按钮上的代码:

  if(hdnfld.Value.ToString()!=null)
        { 
            if(hdnfld.Value.ToString()=="Save")
        {
            SaveNewAddress(); 

        }
        else
        {
            UpdateAddress();

        }




 <%@ Page StylesheetTheme="" Title="" Language="C#" MasterPageFile="~/Site.Master"
AutoEventWireup="true" CodeBehind="frmMyAccountMyProfile.aspx.cs"   Inherits="WebApplication1.frmMyAccountMyProfile" %>

 <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
 <asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
  <script type="text/javascript">

    function CheckType(type) 
    {
        document.getElementById("hdnfld").value = type;
        alert(document.getElementById("hdnfld").value);
        return false;
    }



</script>
<link href="Styles/myStyleSheet.css" rel="stylesheet" type="text/css" />

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div class="divwrap">
    <table style="width: 100%; margin-right: 0px;">
        <tr>.........
<td>
        &nbsp;<asp:LinkButton ID="lnkAddNewAddress" runat="server" OnClientClick="return CheckType('Save');">Click Here To Add New Address</asp:LinkButton>
       <asp:HiddenField ID="hdnfld" runat="server" />
  <asp:ModalPopupExtender ID="lnkAddNewAddress_ModalPopupExtender" runat="server" BackgroundCssClass="modalBackground" DynamicServicePath="" Enabled="True" PopupControlID="pnlMyAddressBook" TargetControlID="lnkAddNewAddress"
                                                        ViewStateMode="Enabled">
                                                    </asp:ModalPopupExtender>

  &nbsp;...........
                                                <asp:Button ID="btnEdit" runat="server" CssClass="roundcorner btn" OnClick="btnEdit_Click" OnClientClick="return CheckType('Edit');" Text="Edit" />
                                                    &nbsp;
                                                    <asp:Panel ID="pnlMyAddressBook" runat="server" BackColor="White" CssClass="roundcorner">

【问题讨论】:

  • 为什么要触发按钮的点击事件。如果它着火了,那么你就再也看不到你的弹出窗口了。由于页面加载,它将隐藏自己。请详细说明,为什么要触发按钮事件?
  • 在模态弹出窗口中,我有一个名为保存的按钮。如果客户之前点击了 EDIT 按钮,此按钮将编辑(更新)地址。否则,它(保存按钮)将添加(插入)一个新地址(如果客户端之前单击了链接按钮(即添加))。我需要知道客户在进入模式弹出窗口之前点击了什么,以便我可以在视图状态中获取值。为此,我需要触发 click 事件,以便我可以在 click 事件中将值置于 viewstate 中。
  • ohhh,所以您有相同的弹出窗口来保存和更新地址,并且您只想设置值,根据该值您可以区分用户想要添加新地址或更新地址。我对吗?
  • 看起来很糟糕,请同时发布 javascript 函数。并且您还没有使用模态弹出扩展器配置编辑按钮。但之前你告诉过它也会提示相同的弹出窗口。
  • 我也发布了 javascript 函数......你只看到了编辑的一半......它都在那里......!

标签: asp.net ajax linkbutton


【解决方案1】:

如果你真的想在代码后面保留一些价值,你可以使用隐藏字段而不是视图状态。您可以在客户端以及后面的代码中访问隐藏字段。

 <asp:LinkButton ID="lnkAddNewAddress" runat="server" OnClientClick="return CheckType('save');">Click Here To Add New Address</asp:LinkButton>
<asp:HiddenField ID="hdf_type" runat="server" />

Javascript 代码

function CheckType(type) {
        document.getElementById("hdf_type").value = type;
         return false;
    }

点击保存按钮时访问后面代码中的值,并根据隐藏字段中的值执行您的操作保存或更新。

hdf_type.Value.ToString();

为您提供更多帮助

HTML 文件应如下所示

下面我发布了对我来说工作正常的整个代码。

<head runat="server">
<title></title>
<script type="text/javascript">
    function CheckType(type) {
        document.getElementById("hdf_type").value = type;
        alert(document.getElementById("hdf_type").value);
        return false;
    }
</script>
 </head>
 <body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>


    <asp:LinkButton ID="lnkAddNewAddress" runat="server" OnClientClick="return CheckType('save');">Click Here To Add New Address</asp:LinkButton>

    <asp:Button ID="btn" runat="server" OnClientClick="return CheckType('edit');" Text="Click Here To Add New Address" />

    <asp:ModalPopupExtender ID="lnkAddNewAddress_ModalPopupExtender" runat="server" BackgroundCssClass="modalBackground"
        DynamicServicePath="" Enabled="True" PopupControlID="pnlMyAddressBook" TargetControlID="lnkAddNewAddress"
        ViewStateMode="Enabled">
    </asp:ModalPopupExtender>

    <div id="pnlMyAddressBook" style="height: 100px; width: 100px; display: none; background-color: Gray">
         <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /><br />

    </div>
    <asp:HiddenField ID="hdf_type" runat="server" />
</div>
</form>

在代码后面获取价值:

【讨论】:

  • 如何将值获取到隐藏字段中??
  • 另外,为什么我不能在这里使用 ViewState?
  • 用你想保存的值替换任何单词。还有一件事情。我已经在我的机器上检查了这个。它在这里工作正常。
  • 这是我使用视图状态时保存按钮上的代码 if(ViewState["Click"]!=null) { if(ViewState["Click"].ToString()=="Edit ") { 更新地址(); } else { SaveNewAddress(); }
  • 我已经编辑了我的答案。单击编辑按钮时只需传递值“编辑”。并保存为其他按钮。在后面的代码中,您可以轻松检查隐藏文件是否包含“编辑”或“保存”。
【解决方案2】:

试试这个:

<asp:LinkButton ID="lnkAddNewAddress" runat="server" OnClick="lnkAddNewAddress_Click">Click Here To Add New Address</asp:LinkButton>

<asp:ModalPopupExtender ID="lnkAddNewAddress_ModalPopupExtender" runat="server" BackgroundCssClass="modalBackground"
        DynamicServicePath="" Enabled="True" PopupControlID="pnlMyAddressBook" TargetControlID="btnHidden">
    </asp:ModalPopupExtender>

<asp:Button ID="btnHidden" runat="server" style="Display:none;" Text="Button"/>

在后面的代码中:

protected void lnkAddNewAddress_Click(object sender, EventArgs e)
    {
        lnkAddNewAddress_ModalPopupExtender.Show();

    }

【讨论】:

  • 它对我有用,ModalPopupExtender 的 TargetControlID 设置为隐藏 Button,LinkBut​​ton 在后面的代码中显示 ModalPopupExtender
  • 那么我到底在做什么呢?创建一个新按钮并将其隐藏? (我真的不想打扰 UI)...
  • 为什么要设置“TargetControlID="btnHidden?。当您从代码隐藏提示弹出窗口时。
  • @代码 - 有什么建议吗??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多