2016-06-27 6 views
7

Есть ли другой способ отображать предупреждающее сообщение с заднего конца в веб-приложении asp.net, а не на этом.Предупреждающее сообщение от C#

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

+5

Что не так с этим? –

+0

Какая ошибка с этим кодом? Что не работает должным образом? Вы получаете сообщения об ошибках? –

+1

@ up-voter: Я не думаю, что вопрос стоит за +1 –

ответ

2

Сообщения об ошибках сказать вам, что это неправильно. Для метода RegisterStartupScript требуется первый аргумент типа System.Web.UI.Page, который используется в ASP.NET WebForms. Вместо этого вы передаете в качестве первого аргумента, который является классом Controller, который используется в 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> 
} 
1

Если вы ищете другой путь, то здесь

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 care to explain –