2015-01-02 2 views
4

Я использовал метод ScriptManager.RegisterStartupScript(), чтобы показать предупреждение, когда происходит конкретная вещь в конце. Он отлично работает в режиме загрузки страницы, но не в частности метод, который вызывается при нажатии определенной кнопки. Я не мог найти решение, потому что на другой странице он отлично работает как при загрузке страницы, так и в методе.Метод ScriptManager.RegisterStartupScript() не работает - ASP.NET, C#

Script Менеджер RegisterStartupScript Метод

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true); 

HTML

<asp:HiddenField runat="server" ClientIDMode="Static" ID="PostBackController"/> 
<button class="some-class" id="btnSave" runat="server" onclick="btnSave_clientClick();">SAVE</button> 

Javascript

function btnSave_clientClick() { 

    // code 

    if (some_condition) { 

     $('#PostBackController').val("btn_save"); 
     __doPostBack(); 

    } 
} 

Метод загрузки страницы

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (PostBackController.Value == "btn_save") 
    { 
     uploadDocSave_ServerClick(); 
    } 
} 

Метод Желания следует назвать, когда кнопка Нажал

protected void uploadDocSave_ServerClick() 
{ 
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true); 
} 
+0

добавить breackpoint на ' uploadDocSave_ServerClick() 'и проверить, вызвано ли его вызовом или нет? –

+0

Я уже сделал. конечно, его зовут. – GMHSJ

+0

попробуйте wrting инструкцию 'return;' после строки .. кажется, что исполняются другие коды после регистрации скрипта –

ответ

0

Попробуйте это:

Если вы использовали панели Update Затем вы можете использовать:

ScriptManager.RegisterStartupScript(this, this.GetType(), Guid.NewGuid().ToString(), "javascriptFunction();", true); 

Другое Wise Вы можете использовать

ClientScript.RegisterStartupScript 
     (GetType(),Guid.NewGuid().ToString(), "javascriptFunction();",true); 
+0

Все еще не работает :( – GMHSJ

+0

@HanushkaSuren может использовать ошибку огня для ошибок –

+0

Да, я использую firebug, но нет никакой ошибки в консоли или где-нибудь. Это странно. – GMHSJ

0

Попробуйте удалить строку, содержащую:

__doPostBack(); 

в коде JavaScript.

+0

Я уже пробовал :( – GMHSJ

+0

Run приложение в Firefox с Firebug Console On - чтобы узнать, есть ли какие-либо сообщения об ошибках. Возможно, какой-то код JavaScript извне блокирует выполнение вашей функции предупреждения. –

0

Извините, что я опаздываю на вечеринку. Используйте метод this overload из RegisterStartupScript и установите первый параметр кнопкой, на которую вы хотите щелкнуть, чтобы зарегистрировать функцию javascript. Нравится:

ScriptManager.RegisterStartupScript(btnSave, this.GetType(), "alert", "alert('msg');", true); 

Cheers!

0

Попробуйте это: со стороны

Client: сторона

Use Literal Control 
<asp:Literal ID="IMsg" runat="server" Text=""/> 

Сервер:

string msg = "<script>alert('Change successfully');</script>"; 
IMsg.Text = msg; 

Я думаю, что это поможет вам. Он отлично работает в моих проектах.

+0

Почему вы опубликовали это как изображение? –

0

действительно простой способ

Вы можете подключить вверх <button runat="server"></button> к событию сервера с помощью onserverclick атрибута:

HTML:

<button class="some-class" id="btnSave" onserverclick="uploadDocSave_ServerClick" runat="server">SAVE</button> 

C# Handler:

protected void uploadDocSave_ServerClick(Object sender, EventArgs args) 
{ 
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true); 
} 

С КЛИЕНТАМИ SIDE ВАЛИДАЦИИ

Если вы хотите добавить какой-то проверки JavaScript перед постбэка, вы можете сделать это из onclick атрибута:

HTML :

<button class="some-class" id="btnSave" onclick="return btnSave_clientClick();" onserverclick="uploadDocSave_ServerClick" runat="server">SAVE</button> 

JavaScript:

function btnSave_clientClick() { 

    // code 

    if (some_condition) { 

     return true; // allows the control to do a postback 

    } 
} 

C# Handler:

protected void uploadDocSave_ServerClick(Object sender, EventArgs args) 
{ 
    ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('msg');", true); 
} 
0

Мои глубочайшие соболезнования в ОП, если вы все еще должны работать с WebForms. Это, как вы можете решить в минимальном пути при одновременном снижении трафика:

Codebehind образец:

public partial class About : Page, IPostBackEventHandler 
{ 
    protected void Page_Init(object sender, EventArgs e) 
    { 
     // Unless the button is serverside clicking it will reload the page 
     // registering the page like this prevents a page reload. 
     var scriptManager = ScriptManager.GetCurrent(Page); 
     scriptManager?.RegisterAsyncPostBackControl(Page); 
    } 

    /// <inheritdoc /> 
    public void RaisePostBackEvent(string eventArgument) 
    { 
     var javascriptCode = $"alert('server method called and triggered client again. {DateTime.Now.ToString("s")}');"; 

     // if your key isn't changed this script will only execute once 
     ScriptManager.RegisterStartupScript(udpMain, typeof(UpdatePanel), Guid.NewGuid().ToString(), javascriptCode, true); 

     // updating the updatepanel will inject your script without reloading anything else 
     udpMain.Update(); 
    } 
} 

WebForms образец:

<script type="text/javascript"> 
    function clientFunction(sender, args) { 

     alert('client function called'); 

     <%= Page.ClientScript.GetPostBackEventReference(Page, "callServerFunction") %> 

     args.preventDefault(); 
    } 
</script> 

<asp:UpdatePanel runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional" ID="udpMain"> 
    <ContentTemplate> 
     <h2><%: Title %>.</h2> 
     <h3>Your application description page.</h3> 
     <p>Use this area to provide additional information.</p> 
     <button onclick="clientFunction(); return false;">raise server function</button> 
    </ContentTemplate> 
</asp:UpdatePanel> 

Смежные вопросы