2016-06-27 12 views
7

Gibt es eine andere Möglichkeit, Warnmeldung von Back-End in asp.net Web-Anwendung statt dieser anzuzeigen.Warnmeldung von C#

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

Ich habe auch System.Web.UI Namespace enthalten verwenden, aber noch bin immer diese 2 Fehler mit diesem Code:

Erster Fehler:

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

Zweiter Fehler:

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

+5

Was mit diesem falsch? –

+0

Welchen Fehler gibt es bei diesem Code? Was funktioniert nicht wie erwartet? Erhalten Sie Fehlermeldungen? –

+1

@ up-Voter: Ich denke nicht, die Frage ist für +1 –

Antwort

2

Die Fehlermeldungen Ihnen sagen, was falsch ist. Die Methode RegisterStartupScript erfordert ein erstes Argument vom Typ System.Web.UI.Page, das in ASP.NET-WebForms verwendet wird. Stattdessen übergeben Sie this als das erste Argument, das eine Controller-Klasse ist, die in ASP.NET MVC verwendet wird!

Das bedeutet, dass der Code, den Sie verwenden, für eine andere Webarchitektur gedacht ist. Um die JavaScript-Ausgabe von einem Controller zu steuern, sind Sie viel besser mit der Model oder vielleicht ViewBag. Wie folgt aus:

In Ihrem Controller-Code

ViewBag.ShowAlert = true; 

Ihrer Ansicht

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

Wenn Sie die volle Kontrolle über das Skript benötigen, die gerendert wird, speichern Sie das Skript als String im ViewBag, obwohl dies definitiv nicht empfohlen wird!

In Ihrem Controller-Code

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

Ihrer Ansicht

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

Wenn Sie auf der Suche nach einem anderen Weg sind, dann ist es hier

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.

+5

Downvoter Pflege zu erklären –