2016-06-27 18 views
7

Có cách nào khác để hiển thị thông điệp cảnh báo từ đầu sau trong ứng dụng web asp.net thay vì điều này không.Thông điệp cảnh báo từ C#

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

Tôi đã bao gồm sử dụng System.Web.UI namespace cũng có, nhưng vẫn nhận được những 2 lỗi với mã này:

lỗi đầu tiên:

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

Thứ hai lỗi:

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

Điều gì là sai với điều này? –

+0

Lỗi nào xảy ra với mã này? Những gì không hoạt động như mong đợi? Bạn có nhận được thông báo lỗi nào không? –

+1

@ up-cử tri: Tôi không nghĩ rằng câu hỏi là giá trị cho +1 –

Trả lời

2

Thông báo lỗi cho bạn biết điều gì là sai. Phương thức RegisterStartupScript yêu cầu đối số đầu tiên của loại System.Web.UI.Page, được sử dụng trong ASP.NET WebForms. Thay vào đó, bạn đang chuyển đối số this làm đối số đầu tiên, là lớp Controller, được sử dụng trong ASP.NET MVC!

Điều đó có nghĩa là mã bạn đang sử dụng có nghĩa là cho một kiến ​​trúc web khác. Để kiểm soát đầu ra JavaScript từ Bộ điều khiển, bạn nên sử dụng số Model hoặc có thể ViewBag. Như thế này:

Trong mã điều khiển của bạn

ViewBag.ShowAlert = true; 

Theo quan điểm của bạn

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

Nếu bạn cần toàn quyền kiểm soát các kịch bản được trả lại, tiết kiệm kịch bản như là một chuỗi trong ViewBag, mặc dù điều này chắc chắn không được khuyến khích!

Trong mã điều khiển của bạn

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

Theo quan điểm của bạn

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

Nếu bạn đang tìm kiếm cách khác thì đây là

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 –

Các vấn đề liên quan