C# asp:按钮未正确显示
这是我的设想: 我想根据gridview中显示的行数显示一个按钮(btnGenerate)。我让它显示了一秒钟,然后它又消失了。我正在使用我的另一个按钮(btnImport)的onclientclick。我认为导致问题的原因是,在同一个按钮(btnImport)的OnClick事件上,两个gridview对每个数据绑定执行。这可能是问题所在吗?我已经使用javascript编写了一个脚本,从客户端执行此任务。有更好的方法吗?我能做些什么来解决我的问题 以下是我目前掌握的代码:C# asp:按钮未正确显示,c#,javascript,asp.net,button,gridview,C#,Javascript,Asp.net,Button,Gridview,这是我的设想: 我想根据gridview中显示的行数显示一个按钮(btnGenerate)。我让它显示了一秒钟,然后它又消失了。我正在使用我的另一个按钮(btnImport)的onclientclick。我认为导致问题的原因是,在同一个按钮(btnImport)的OnClick事件上,两个gridview对每个数据绑定执行。这可能是问题所在吗?我已经使用javascript编写了一个脚本,从客户端执行此任务。有更好的方法吗?我能做些什么来解决我的问题 以下是我目前掌握的代码: <asp:B
<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" />
以下是脚本:
<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>
函数DisplayButtonGenerate(){
var行计数=;
var buttonGen=document.getElementById(“”);
如果(行计数==0)
{
buttonGen.style.display=“块”;
}
}
这里不需要JS函数
只需检查数据源是否存在错误Grid
if count!=0
并且如果不仅仅是在codebehind中设置按钮的可见性。如果要在单击按钮后更新InventoryGrid、ErrorsGrid
代码中的网格控件,则需要将它们保存在UpdatePanel
<asp:UpdatePanel ID="upnl" runat="server" UpdateMode="Conditional">
<contenttemplate>
InventoryGrid,ErrorsGrid mark up
</contentTemplate>
<Triggers>
//set async trigger as btnImport
</Triggers>
</asp:UpdatePanel>
库存网格,错误网格标记
//将异步触发器设置为btnImport
让我们把你的问题分解成几个步骤
- 单击btnImport,它首先调用
,进行客户端处理 然后执行完整的回发,转到服务器端并处理其服务器端处理程序OnClientClick
OnClick
- 处理
处理程序后,页面再次呈现,btnGenerateOnClick
中的无条件代码再次运行,默认状态再次呈现显示:none
btnImport
正在这样做
解决方案:
我可以提出几点建议
protected void btnImport_Click(object sender, EventArgs e)
{
InventoryGrid.DataBind();
ErrorsGrid.DataBind();
//set visibility of btnGenerate in Page_Load also;
btnGenerate.Visible = ErrorsGrid.Rows.Count == 0;
}
并删除显示:从btnGenerate from client无您的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;
}
如果我理解你的要求。正确地说,将按钮的“Visbible”属性设置为true或false应该有效。i、 e btnGenerate.Visible=真/假。最初,您可以将按钮可见性设置为false,然后根据记录计数,您可以在所需的事件处理程序中对其进行修改。这将是最理想的方法,但我尝试了这一点,并且使用了语句btnGenerate.Enable=true/false;无法正确执行。需要回发才能看到更改,您不能回发吗?是的,我不能这样做的主要原因是所有的数据处理等都在InventoryUpload包装中完成,因此我需要访问的列表无法从btnImport\u Click方法
DisplayButtonGenerate()访问
仅当(rowCount==0)中没有行时才会显示按钮。如果(rowCount>0){…},那不应该是否,ErrorsGrid包含错误记录,因此如果gridview没有任何行,实际上没有错误记录,用户可以继续提交数据…在显示btnGenerate
按钮后,您想做什么?你想跳回帖子吗?好的,我已经这样做了,它正确地显示了按钮,但是我的GridView没有显示它们的图标data@user3180965,如果不返回false,它将执行btnImport\u Click
事件,这是回发。当你做一个完整的回发时,你看不到被访问的内容button@user3180965好啊我想您也要更新gridview数据?最好在更新面板中保留InventoryGrid,ErrorsGrid,btnGenerate
,是的,它需要为两个gridview数据绑定ErrorsGrid.Rows.Any();给出一个编译器错误,表示GridViewCollection不包含任何的定义,如果我删除脚本并执行上面提到的操作,您将需要使用System.Linq
abv在您的页面中,bt无论如何,我已经修改了代码,立即检查好的,我更改了那个部分,逻辑有点错误,但是我纠正了它,如果(ErrorsGrid.Rows.Count==0)btnGenerate.Visible=true,它现在就可以工作了;谢谢你的帮助!:)谢谢你的帮助!它为我对asp的理解增加了一些知识,是我选择使用的第一选择。这很简单,效果也很好。不客气。我们都在这个世界上学习。很高兴这有帮助。
OnClientClick="return DisplayButtonGenerate()"
function DisplayButtonGenerate() {
....
return false;
}