对于我工作的内部网页,我根据SQL表中的条目显示DataGrid(不是直接,但对条目进行了一些处理)。
DataGrid中的每一行都有一个用户单击的按钮。我需要这个按钮来打开一个新的窗口或标签(我相信我无法决定,因为这是基于浏览器配置),并且还更改了SQL表中的值,表示单击了按钮。
如果我使用asp:Hyperlink,那么页面打开很好,但我不知道如何更新SQL。反之亦然如果我使用asp:LinkButton我可以更新SQL但无法打开新页面。
我想做的不可能吗?
由于
编辑:
我在我的.cs文件中尝试了这两种方法,但都没有用:
ClientScript.RegisterStartupScript(GetType(), "openwindow", "window.open('" + url + "','_preview'");
Response.Write("<script type='text/javascript'>detailedresults=window.open('" + url + "');</script>");
答案 0 :(得分:2)
<asp:TemplateField HeaderText="Action"> <ItemTemplate>
<asp:LinkButton ID="lbtnConfigureSurvey" runat="server" CausesValidation="False"
CommandName="ConfigureSurvey" CommandArgument='<%# Eval("intSurveyID") %>'
OnClientClick="aspnetForm.target ='_blank';">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
protected void gvSurveyList_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "ConfigureSurvey")
{
Response.Redirect('Your page url');
}
}
答案 1 :(得分:0)
试试这个
Response.Write("<script type='text/javascript'>detailedresults=window.open('PAGE NAME.aspx');</script>")
修改强>
您可以设置链接按钮的命令名称并在rowcocommand事件
中执行代码 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("commandname for linkbutton"))
{
//update code
Response.Write("<SCRIPT language=\"javascript\">open('Yourpage.aspx','_blank','top=0,left=0,status=yes,resizable=yes,scrollbars=yes');</script>");
}
}
答案 2 :(得分:0)
您可以使用LinkButton并使用OnClientClick属性设置将在新浏览器窗口中打开页面的java脚本。此脚本必须返回true,以便可以进行回发,并且您可以在服务器端处理单击事件以更新数据库。
IMO,更好的方法是使用超链接并在新的浏览器窗口中打开页面。但是,您必须在打开页面(例如Page2)时传递一个查询字符串参数,该页面将告诉新页面它应该更新数据库。因此,打开页面的网址将类似于"page2.aspx?recordId=xyz"
。在page2.aspx.cs中,您将拥有诸如
protected void page_load(object sender, EventArgs e)
{
if (!IsPostback)
{
var recordId = Response.QueryString["recordId"];
if (!string.IsNullOrEmpty(recordId))
{
// update database
...
}
}
...
}
从安全角度来看,您可能希望在参数值中包含超时并加密整个事物。
答案 3 :(得分:0)
您可以使用LinkButton并在回发时调用RegisterStartupScript以在页面加载时执行类似的操作
的.aspx:
<asp:LinkButton OnClick="OnButtonClick" Text="Update" runat="server" />
.aspx.cs:
protected void OnButtonClick(object sender, EventArgs e)
{
ClientScript.RegisterStartupScript(GetType(), "openwindow", "<script type=text/javascript> window.open('About.aspx'); </script>");
}
您需要将整个脚本元素提供给RegisterStartupScript。
答案 4 :(得分:0)
Heperlink不会在点击时调用服务器端事件,所以你不会回复执行SQL任务,并且通过使用LinkButton你可以在新窗口或选项卡中打开页面来执行此操作 你需要在Grid_RowBoundEvent中添加下面的小代码 例如:LinkButton.OnClientClick =“window.open('http://www.google.com');”; 您可以根据自己的要求提及这个网址
再次在代码后面你将得到服务器端事件你可以做你的SQL任务。
希望对你有所帮助