如何在public static void方法中创建消息框

8

我有一个公共静态方法,如果选择了特定的值,我希望显示一条消息。这是在ASP.NET中进行的,因此添加using System.Windows.Forms;会导致问题,因为我正在使用using System.Web.UI.WebControls;。那么我该如何创建一条消息呢?

public static void UpdateSerialQtyRcvd(int SerNoID, int QtyRcvd)
{
     if (SerNo.QtyRcvd != 1)
     {
         if (SerNo.Reason == "")
         {
             //message
         }
     }
}

Javascript背后的代码:

function UpdateSerialQtyRcvd(sender, SerNoID, QtyRcvd) {
        if (QtyRcvd < 0) {
            alert("Qty Rcvd must be greater than 0");
        }
        else {
            PageMethods.UpdateSerialQtyRcvdUserControl(SerNoID, QtyRcvd, OnUpdateSuccess, OnUpdateFail);
        }
}

调用Web方法:
[WebMethod]
public static void UpdateSerialQtyRcvdUserControl(int SerNoID, int QtyRcvd)
{
     JobDeliveryDebrief.UpdateSerialQtyRcvd(SerNoID, QtyRcvd);
}

2
你搜索了一下吗?我在这里的SO上找到了几篇关于那个问题的帖子。 - SuperOli
@SuperOli 是的,我已经搜索过了,但是我找不到解决方案。 - user123456789
1
好的,那么下次请在您的帖子中列出您尝试过的事情。 - SuperOli
@SuperOli 我试过使用 System.Windows.Forms; 但是没有起作用。 - user123456789
发布OnUpdateSuccess、OnUpdateFail函数的代码,您可以在那里显示警告框。 - Enrique Zavaleta
5个回答

7

添加一个 JavaScript alert

clientscriptmanager.registerstartupscript(this.GetType(),"MyAlert","<script>alert('Hello');</script>",true);

要在静态方法中使用ClientScript,请将Page对象作为参数传递给您的静态方法。Page不是静态类。您无法在静态方法中调用非静态字段。因此,您需要将页面对象作为参数传递给您的静态方法。

protected void Page_Load(object sender, EventArgs e)
{
     UpdateSerialQtyRcvd(SerNoID, QtyRcvd,Page);
}

public static void UpdateSerialQtyRcvd(int SerNoID, int QtyRcvd,Page page)
{
    if (SerNo.QtyRcvd != 1)
    {
        if (SerNo.Reason == "")
        {
            page.ClientScript.RegisterStartupScript(page.GetType(),"alert", "<script>alert('Hai');</script>");
        }
    }        
}

这真的是aspx.cs页面吗? - shreesha
这是一个ascx.cs页面。 - user123456789
另一个错误:错误 2496:非静态字段、方法或属性 System.Web.UI.Control.Page.get 需要对象引用错误 2497:非静态字段、方法或属性 'object.GetType()' 需要对象引用 - user123456789
但是,如果我尝试在if语句中调用LoadJavaScript函数,我会收到错误消息:错误47需要非静态字段、方法或属性“System.Web.UI.Control.Page.get”的对象引用。我不想在Page_Load中调用该消息,它需要被UpdateSerialQtyRcvd函数调用。 - user123456789
这个不行。会出现“无效的 Web 服务调用”错误。参数“page”缺少值。 - user123456789
显示剩余4条评论

1
使用 ScriptManager.RegisterStartupScript(this, GetType(), "Message", "alert('Message');", true);

1
将您的业务方法更改为在出现错误条件时抛出异常,就像这样:
public static void UpdateSerialQtyRcvd(int SerNoID, int QtyRcvd)
{
     if (SerNo.QtyRcvd != 1)
     {
         if (SerNo.Reason == "")
         {
             throw new Exception("Your message");
         }
     }
}

并在您的JavaScript函数中处理错误,像这样:

function OnUpdateFail(result) {
    alert(result.get_message());
}

1

这个方法展示一个消息。你希望在WebUserControl.ascx中使用UpdateSerialQtyRcvd

public static void UpdateSerialQtyRcvd(System.Web.UI.Page pg)
{
     pg.ClientScript.RegisterStartupScript(pg.GetType(), "alert", "<script>alert('Message');</script>");
}

现在您可以像这样添加您的if语句
public static void UpdateSerialQtyRcvd(System.Web.UI.Page pg, int qtyRcvd)
{
     if (qtyRcvd != 1)
     {
          //if (SerNo.Reason == "")
          //{
                pg.ClientScript.RegisterStartupScript(pg.GetType(), "alert", "<script>alert('Message');</script>");
          //}
     }
}

现在,您可以从每个已注册WebUserControl.ascx的页面中调用UpdateSerialQtyRcvd 静态方法,如下所示:

YourPage.aspx:

<%@ Register Src="~/WebUserControl2.ascx" TagPrefix="uc1" TagName="WebUserControl2" %>
<uc1:WebUserControl2 runat="server" id="WebUserControl2" />

YourPage.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    WebUserControl2.UpdateSerialQtyRcvd(this,2);
}

0

您可以从静态 WebMethod 返回所需的消息。在客户端使用 JavaScript alert 弹出消息。

将 WebMethod 的返回类型更改为字符串。

[WebMethod]
public static string UpdateSerialQtyRcvdUserControl(int SerNoID, int QtyRcvd)
{
    return JobDeliveryDebrief.UpdateSerialQtyRcvd(SerNoID, QtyRcvd);
}

将UpdateSerialQtyRcvd的返回类型更改为字符串

public static void UpdateSerialQtyRcvd(int SerNoID, int QtyRcvd)
{
     if (SerNo.QtyRcvd != 1)
     {
         if (SerNo.Reason == "")
         {
             //message
             return "message";
         }
     }
}

在JavaScript中,使用OnUpdateSuccess函数弹出从WebMethod获取的任何消息。
 function UpdateSerialQtyRcvd(sender, SerNoID, QtyRcvd) {
            if (QtyRcvd < 0) {
                alert("Qty Rcvd must be greater than 0");
            }
            else {
               PageMethods.UpdateSerialQtyRcvdUserControl(SerNoID, QtyRcvd, OnUpdateSuccess, OnUpdateFail);
            }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接