ScriptManager.RegisterStartupScript() 方法不起作用 - ASP.NET,C#

ScriptManager.RegisterStartupScript() method not working - ASP.NET, C#

本文关键字:ASP NET 不起作用 RegisterStartupScript 方法 ScriptManager      更新时间:2023-09-26

我使用了ScriptManager.RegisterStartupScript()方法,以便在后端发生特定事情时显示警报。它在页面加载方法中工作正常,但在单击特定按钮时调用的特定方法中不起作用。我找不到解决方案,因为在另一个页面中,它在页面加载和方法中都工作正常。

脚本

管理器注册启动脚本方法

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true);

.HTML

<asp:HiddenField runat="server" ClientIDMode="Static" ID="PostBackController"/>
<button class="some-class" id="btnSave" runat="server" onclick="btnSave_clientClick();">SAVE</button>

爪哇语

function btnSave_clientClick() {
     // code
     if (some_condition) {
        $('#PostBackController').val("btn_save");
        __doPostBack();
     }
}

页面加载方法

protected void Page_Load(object sender, EventArgs e)
{
    if (PostBackController.Value == "btn_save")
    {
        uploadDocSave_ServerClick();
    }
}

单击按钮时应调用方法愿望

protected void uploadDocSave_ServerClick()
{
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true);
}
如果您

仍然需要使用Webforms,我对OP表示最深切的哀悼。这是您可以以最小的方式解决它,同时减少流量的方法:

代码隐藏示例:

public partial class About : Page, IPostBackEventHandler
{
    protected void Page_Init(object sender, EventArgs e)
    {
        // Unless the button is serverside clicking it will reload the page
        // registering the page like this prevents a page reload.
        var scriptManager = ScriptManager.GetCurrent(Page);
        scriptManager?.RegisterAsyncPostBackControl(Page);
    }
    /// <inheritdoc />
    public void RaisePostBackEvent(string eventArgument)
    {
        var javascriptCode = $"alert('server method called and triggered client again. {DateTime.Now.ToString("s")}');";
        // if your key isn't changed this script will only execute once
        ScriptManager.RegisterStartupScript(udpMain, typeof(UpdatePanel), Guid.NewGuid().ToString(), javascriptCode, true);
        // updating the updatepanel will inject your script without reloading anything else
        udpMain.Update();
    }
}

网络表单示例:

<script type="text/javascript">
    function clientFunction(sender, args) {
        alert('client function called');
        <%= Page.ClientScript.GetPostBackEventReference(Page, "callServerFunction") %>
        args.preventDefault();
    }
</script>
<asp:UpdatePanel runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional" ID="udpMain">
    <ContentTemplate>
        <h2><%: Title %>.</h2>
        <h3>Your application description page.</h3>
        <p>Use this area to provide additional information.</p>
        <button onclick="clientFunction(); return false;">raise server function</button>
    </ContentTemplate>
</asp:UpdatePanel>

试试这个:

如果您使用了更新面板,则可以使用:

ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), "javascriptFunction();", true);

您可以使用的其他明智

ClientScript.RegisterStartupScript
        (GetType(),Guid.NewGuid().ToString(), "javascriptFunction();",true);

试试这个:

客户端:

Use Literal Control
<asp:Literal ID="IMsg" runat="server" Text=""/>

服务器端:

string msg = "<script>alert('Change successfully');</script>";
IMsg.Text = msg;

我认为它会帮助你。它在我的项目中工作正常。

尝试删除包含以下内容的行:

__doPostBack();

在 JavaScript 代码中。

对不起,我在聚会上迟到了。使用此重载RegisterStartupScript方法,并将第一个参数设置为要单击以注册 javascript 函数的按钮。喜欢:

ScriptManager.RegisterStartupScript(btnSave, this.GetType(), "alert", "alert('msg');", true);

干杯!

真正简单的方法

您可以使用 onserverclick 属性将<button runat="server"></button>连接到服务器事件:

.HTML:

<button class="some-class" id="btnSave" onserverclick="uploadDocSave_ServerClick" runat="server">SAVE</button>

C# 处理程序:

protected void uploadDocSave_ServerClick(Object sender, EventArgs args)
{
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true);
}

使用客户端验证

如果要在回发之前添加某种 JavaScript 检查,可以从 onclick 属性执行此操作:

.HTML:

<button class="some-class" id="btnSave" onclick="return btnSave_clientClick();" onserverclick="uploadDocSave_ServerClick" runat="server">SAVE</button>

JavaScript:

function btnSave_clientClick() {
     // code
     if (some_condition) {
        return true; // allows the control to do a postback
     }
}

C# 处理程序:

protected void uploadDocSave_ServerClick(Object sender, EventArgs args)
{
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true);
}