这是我的场景:
我想根据 GridView 中显示的行数显示一个按钮(btnGenerate)。我让它显示了一秒钟然后又消失了。我正在使用其他按钮之一(btnImport)的 onclientclick。我认为导致问题的是,在同一个按钮(btnImport)的 OnClick 事件上,两个 gridview 为每个数据绑定(bind)执行。这可能是问题所在吗?我已经使用 javascript 编写了一个脚本来从客户端执行此任务。有更好的方法吗?我可以做什么来解决我的问题?
这是我到目前为止的代码:
<asp:Button runat="server" ID="btnImport" Text="Load Data from File"
BackColor="#990000" ForeColor="White" nowrap OnClick="btnImport_Click"
style="display:none" OnClientClick="DisplayButtonGenerate()"/>
<asp:Button ID="btnGenerate" runat="server" Text="Generate New Stock Codes"
BackColor="#990000" ForeColor="White" OnClick="btnGenerate_Click"
style="display:none" />
我有两个 GridView :显示所有错误记录的 ErrorsGrid 和显示正确记录的 InventoryGrid。正如我上面所说,如果 ErrorsGrid 的 rowCount=0,则显示 btnGenerate。
protected void btnImport_Click(object sender, EventArgs e)
{
InventoryGrid.DataBind();
ErrorsGrid.DataBind();
}
protected void btnGenerate_Click(object sender, EventArgs e)
{
FinalMessage.AppendLine(_InsertWrapper.PostData());
}
这是脚本:
<script language="javascript" type="text/javascript">
function DisplayButtonGenerate() {
var rowCount = <%=ErrorsGrid.Rows.Count %>;
var buttonGen = document.getElementById("<%=btnGenerate.ClientID%>");
if(rowCount == 0)
{
buttonGen.style.display = "block";
}
}
</script>
最佳答案
您的 btnImport 已设置服务器端 OnClient
和客户端 OnClientClick
。我想发生的事情是首先调用客户端,显示按钮,然后服务器端启动,页面从服务器刷新,然后按钮再次隐藏。您可以采用一种或另一种方式来完成此操作,但不能同时使用两种方式:
服务器端:删除OnClientClick
& style="display:none"
& JavaScript,将按钮的Visible
属性设置为false,并在服务器上的代码隐藏单击事件中添加:
if(ErrorsGrid.Rows.Count == 0)
btnImport.Visible = True;
客户端:从 JavaScript 函数返回 false 到 OnClientClick
:
OnClientClick="return DisplayButtonGenerate()"
function DisplayButtonGenerate() {
....
return false;
}
关于c# - ASP :Button not displaying correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22220874/