好的 - 所以我正在使用一个使用自定义日期选择器控件的系统(我知道还有其他的...但为了一致性,我想了解为什么我的当前问题正在发生并修复它).
因此,带有文本框和Page_PreRender的自定义用户控件执行此操作:
protected void Page_PreRender(object sender, EventArgs e)
{
string clientScript = @"
$(function(){
$('#" + this.Date1.ClientID + @"').datepicker({dateFormat: 'dd/mm/yy', constrainInput: true});
});";
Page.ClientScript.RegisterStartupScript(this.GetType(), this.ClientID, clientScript, true);
//Type t = this.GetType();
//if (!Page.ClientScript.IsStartupScriptRegistered(t, this.ClientID))
//{
// Page.ClientScript.RegisterStartupScript(t, this.ClientID, clientScript, true);
//}
}
Run Code Online (Sandbox Code Playgroud)
忽略注释掉的东西 - 那是我尝试不同的东西 - 没有帮助.
我的问题是,当我加载页面时,这一切都正常.但是如果我从下拉列表中选择一些导致页面回发的内容 - 当我点击我的日期字段时它们就会停止工作.就像我应该能够点击进入文本框一样,会出现一个漂亮的日历控件.但在回发后,没有出现漂亮的日历控件!
它目前全部包含在(在托管页面中)更新面板中.所以我评论了更新面板的东西,日期在页面回发后工作.所以它似乎与该更新面板有关.
有什么建议吗?
谢谢!!
我搜索了SO和谷歌,但我似乎无法让这个工作.代码在我的asp.net应用程序中的"取消"按钮的代码隐藏点击事件中,但似乎没有关闭弹出窗口.有任何想法吗?
try
{
if (btnCancel.Text == "Close")
{
String csName1 = "PopupScript";
Type csType = this.GetType();
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered(csType, csName1))
{
ClientScript.RegisterStartupScript(GetType(), "ClosePopup", "window.close();", true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
更新:回发后,当我查看源页面时,我看到的唯一相关代码是:
//<![CDATA[
(function() {var fn = function() {$get("ToolkitScriptManager1_HiddenField").value = '';Sys.Application.remove_init(fn);};Sys.Application.add_init(fn);})();window.close();
document.getElementById('ValidationSummary1').dispose = function() {
Array.remove(Page_ValidationSummaries, document.getElementById('ValidationSummary1'));
}
Run Code Online (Sandbox Code Playgroud) 好.我面临的问题是我有自己的自定义控件,我做一个查询,获取记录,并根据数据动态添加HTML控件到页面.
现在有添加一些动态JavaScript的问题
我是在文字控件的帮助下完成的.
<asp:Literal runat="server" ID="latEventToolTipJqueryScripts"></asp:Literal>
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力
<script language="javascript" type="text/javascript">
// <![CDATA[
Sys.Application.add_load(WireEvents_<%=this.ID%>); // fix wiring for .NET ajax updatepanel
$(WireEvents_<%=this.ID%>); // handle page load wiring
function WireEvents_<%=this.ID%>() {
<asp:Literal runat="server" ID="latEventToolTipJqueryScripts"></asp:Literal>
}
// ]]>
</script>
Run Code Online (Sandbox Code Playgroud)
我从代码后面动态添加文字文本.
但是,将控件放在updatepanel中时,回发不会更新脚本.
编辑:Sys.Application.add_load使用updatepanel重新编写必要的功能.问题是需要代替文字的脚本在更新面板中时不会更新.
我已经尝试过ClientScript.RegisterStartupScript,但它与文字控制技巧具有相同的效果.有帮助吗?
---------------------------已解决(tnx到Pranay Rana)---------------- ------------------
摆脱了ascx方面的文字.以及Sys.Application.add_load
现在它只在后面的代码中.让我失望的是JQuery的事情.
this.strBuilderJS.Append( "<script language='javascript' type='text/javascript'>" +
"$(WireEvents_" + this.ID + ");" +
"function WireEvents_" + this.ID + "(){"+
" alert('stuff');");
this.strBuilderJS.Append( "}</script>");
Run Code Online (Sandbox Code Playgroud)
然后
ScriptManager.RegisterStartupScript(this, this.GetType(), "strBuilderJS", strBuilderJS.ToString(), false);
Run Code Online (Sandbox Code Playgroud) 我在OnInit hanlder中有一些代码
if (!Page.ClientScript.IsStartupScriptRegistered(GetType(), "MyScript"))
{
Page.ClientScript.RegisterStartupScript(GetType(), "MyScript", GetStartupScript(), true);
}
Run Code Online (Sandbox Code Playgroud)
在这里我尝试注册一些Java脚本代码.我想让它在按钮点击事件上工作.但它没有执行.它仅在刷新页面后执行.谁能解释我为什么不执行?
thnx提前!
我的页面上有一个提交按钮(服务器端按钮).
这是我点击事件的代码:
protected void SubmitButton_Click(object sender, EventArgs e)
{
db.SaveSomething();
Page.ClientScript.RegisterStartupScript("someScriptWhichReliesOnServerData");
Response.Redirect("SomeOtherPage.aspx");
}
Run Code Online (Sandbox Code Playgroud)
现在,问题是,我使用注册JavaScript Page.ClientScript.RegisterStartupScript,但这不会有效,因为页面没有在回发时重新呈现(这是脚本将被执行的地方),因为相反,Response.Redirect会发生.
我能想到的唯一解决方案是让页面重定向到"意识到"我试图执行一些JavaScript,无论是QueryString,HttpContext.Current.Items还是(gulp)Session.
还有其他想法/建议吗?
编辑澄清:
JavaScript即时执行是对Facebook客户端API的调用,以发布到用户的墙上.它必须在客户端完成.我传递给脚本的东西,如"标题","消息","动作链接"等.基本上是一堆JSON.但关键是这个数据是在回发时创建的,所以我不能在客户端点击时执行这个功能.
所以我想要完成的是提交按钮点击,执行一些JavaScript并进行重定向(不必按顺序,只需要发生).
javascript asp.net redirect page-lifecycle registerstartupscript
我正在开发一个gridview,你可以用一个按钮下载多个文件.
这是我的gridview:
<asp:GridView ID="grdvHistorialMensajes" runat="server" AllowPaging="True"
AutoGenerateColumns="False" CellPadding="4" AllowSorting="true"
EmptyDataText="No Hay Mensajes Enviados" ForeColor="#333333"
GridLines="None" CellSpacing="1"
onpageindexchanging="grdvHistorialMensajes_PageIndexChanging"
onrowcommand="grdvHistorialMensajes_RowCommand"
onsorting="grdvHistorialMensajes_Sorting">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<Columns>
<asp:BoundField DataField="CorreoCliente" HeaderText="Correo Del Cliente" SortExpression="CorreoCliente" />
<asp:BoundField DataField="CorreosAdicionales" HeaderText="Correos Adicionales" SortExpression="CorreosAdicionales" />
<asp:BoundField DataField="Tema" HeaderText="Tema" SortExpression="Tema" />
<asp:BoundField DataField="Mensaje" HeaderText="Mensaje" SortExpression="Mensaje" />
<asp:TemplateField HeaderText="Fecha" SortExpression="Fecha">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, "Fecha", "{0:dd/MM/yyyy}")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="tbxFecha" runat="server" Text='<%#Bind("Fecha","{0:dd/MM/yyyy}") %>' ValidationGroup="gpEdicionAgenda">
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Hora" HeaderText="Hora" SortExpression="Hora" />
<asp:BoundField DataField="Archivos" HeaderText="Archivos" SortExpression="Archivos" />
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton ID="imgBtnDescargarArchivos" …Run Code Online (Sandbox Code Playgroud) c# asp.net response.write clientscript registerstartupscript