来自 C# 的警报消息

Alert message from C#

有没有其他方法可以在 asp.net 网络应用程序中显示来自后端的警报消息而不是这个。

ScriptManager.RegisterStartupScript(this, GetType(), "alertMessage","alert('Called from code-behind directly!');", true);

我也包括了使用 System.Web.UI 命名空间,但使用此代码仍然遇到这 2 个错误:

第一个错误:

The best overloaded method match for 'System.Web.UI.ScriptManager.RegisterStartupScript(System.Web.UI.Page, System.Type, string, string, bool)' has some invalid arguments D:\my_backup\Demos\NewShop\NewShop\API\ProductAPIController.cs 85 17 N‌​ewShop

第二个错误:

Argument 1: cannot convert from 'NewShop.API.ProductAPIController' to 'System.Web.UI.Page' D:\my_backup\Demos\NewShop\NewShop\API\ProductAPIController‌​.cs 85 53 NewShop

如果您正在寻找其他方式,那么这里是

Response.Write("<script>alert('Called from code-behind directly!');</script>");

Note : However this is not the good way. You'll never know where your code will be inserted. Also it could potentially break HTML and cause Javascript errors. RegisterClientScriptBlock is right way to run Javascript on client.

错误消息会告诉您哪里出了问题。 RegisterStartupScript 方法需要类型为 System.Web.UI.Page 的第一个参数,它在 ASP.NET WebForms 中使用。相反,您将 this 作为第一个参数传递,它是 Controller class,用于 ASP.NET MVC!

这意味着您正在使用的代码适用于另一种网络架构。要控制控制器的 JavaScript 输出,最好使用 Model 或者 ViewBag。像这样:

在你的控制器代码中

ViewBag.ShowAlert = true;

在您看来

@if (ViewBag.ShowAlert)
{
    <script>alert("(Almost) called from code-behind");</script>
}

如果您需要完全控制呈现的脚本,请将脚本保存为 ViewBag 中的字符串,尽管绝对不推荐这样做!

在你的控制器代码中

ViewBag.SomeScript = "alert('Added by the controller');";

在您看来

@if (ViewBag.SomeScript != null)
{
    <script>@Html.Raw(ViewBag.SomeScript)</script>
}