3

当用户在gridview上进入编辑模式时,我正在使用RegisterClientScriptBlock向用户发送JS警报,但是由于某种原因它会导致我的页面出错,我不知道为什么......

这是导致问题的方法。错误发生在注册脚本的最后一行。(如果我评论这个页面工作正常!)

    protected void EditRecord(object sender, GridViewEditEventArgs e)
    {

        gvStockItems.EditIndex = e.NewEditIndex;
        // Gather current Search info
        string strPartNo = Session["currentSearchTerm"].ToString();
        BindData();
        gvStockItems.SelectedIndex = gvStockItems.EditIndex;
        Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "thisIsTest", "<script language=\"text/javascript\">alert(\"oops\");</script>");
    }

在 JS 控制台中抛出的错误是

Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Object reference not set to an instance of an object.

它还说这个错误发生在 ScriptResource.axd 的 Error$Create 中,但我认为这是在报告真正问题时发生的错误,所以我完全被难住了。

任何帮助是极大的赞赏。谢谢。

4

2 回答 2

3

删除Page.ClientScript.RegisterClientScriptBlock并尝试使用RegisterStartupScript

// Define the name and type of the client scripts on the page.
String csname1 = "thisIsTest";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    StringBuilder cstext1 = new StringBuilder();
    cstext1.Append("<script type=text/javascript> alert('oops!') </");
    cstext1.Append("script>");

    cs.RegisterStartupScript(cstype, csname1, cstext1.ToString());
}

或者如果你ScriptManager

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "thisIsTest", "alert('oops!');", true);  
于 2012-06-19T14:26:59.340 回答
1

当只在更新面板中进行部分更新时,这似乎与从后面的代码中调用注册脚本有关。如果我EnablePartialRendering="false"在脚本管理器中设置它一切正常。好像我允许部分渲染错误发生。

于 2012-06-19T14:45:42.373 回答