Использование нескольких ScriptManager - PullRequest
0 голосов
/ 11 декабря 2010

У меня есть приложение asp.net 4.0, где все страницы используют главную страницу.У меня есть несколько динамических аспектов, происходящих как на главной странице, так и на дочерних страницах.Для обоих я хотел бы иметь возможность использовать встроенный Microsoft ScriptManager с таким шаблоном:

Код позади:

using System;
using System.Web;
using System.Web.Services;

namespace MyApp.Secure
{
    public partial class myPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        [WebMethod]
        public static string GetString()
        {
            return "abc";
        }
    }
}

Затем в самом содержимом страницы:

<script>
   PageMethods.GetString(OnSucceeded, OnFailed);

    function OnSucceeded(rslt) {
        alert('cool,worked.');
    }

    function OnFailed(error) {
        alert('ooops,failed.');
    }

</script>

Итак, чтобы использовать эту технику, я хотел бы выставить статические [WebMethod] как на моей главной странице, так и на моей дочерней странице.У меня вопрос, как мне это сделать с помощью ScriptManager?Насколько я понимаю, мне нужно иметь ScriptManager внутри тега формы (почему?), Чтобы добавить библиотеку javascript, чтобы позволить мне использовать объект PageMethods.Должен ли я просто создать один ScriptManager на своей главной странице и добавить его в бесполезный тег формы на главной странице?Будет ли этот ScriptManager получать функции [WebMethod] на моей дочерней странице?А как насчет этого тега формы: я знаю, что у меня может быть только один тег runat = 'server' формы, так как бы я управлял этим с другими формами, которые мне нужны на моей главной странице?Как моя маленькая форма, которая оборачивает мою функцию поиска вверху страницы?

Спасибо

Ответы [ 3 ]

0 голосов
/ 11 декабря 2010

В ASP.Net вы можете иметь только один тег формы. Что вам нужно сделать, это разместить тег формы на главной странице и не иметь тегов формы ни на одной из страниц, которые используют страницу мастера. Я поместил ScriptManager прямо под тегом формы на главной странице, так как он будет виден всем страницам, использующим главную страницу. Ваша поисковая функция должна быть внутри тегов формы и не может иметь свой собственный тег формы, она будет использовать форму на главной странице. используя панели обновления, вы можете изолировать текстовое поле и кнопку поиска и делать в коде все, что хотите, например перенаправить на страницу результатов поиска или что-то в этом роде.

0 голосов
/ 15 декабря 2010

Вопрос стал спорным с тех пор, как я отказался от использования ScriptManager. Мне удалось заставить ExtJS публиковать сообщения непосредственно в моих [WebMethod], не полагаясь на какие-либо дополнительные накладные расходы Microsoft. Я не уверен, почему любой, кто уже использует хорошую библиотеку javascript (например, ExtJs или jQuery), пошел бы по пути ScriptManager ко всем [WebMethod]. Вам, конечно, это не нужно, и оно просто привязывает вас к конкретным потребностям использования тегов, которые не имеют ничего общего с вашим приложением.

0 голосов
/ 11 декабря 2010

ScriptManager на вашей главной странице будет достаточно (да, в теге формы).На страницах, которые наследуют ваш мастер, размещается элемент управления scriptmanagerproxy.

Я думаю, что обычно люди используют один тег формы, а затем для кнопок формы обратная передача выполняет соответствующее действие - например, перенаправление на страницу поиска.Я не фанат этого метода, зачем обрабатывать обратную передачу, когда вы просто хотите перенаправить на страницу поиска с помощью строки запроса.Я использовал javascript, чтобы обойти его, либо по нажатию кнопки измените действие формы на любое подходящее, либо просто переопределите тип кнопки отправки все вместе, и javascript создаст ваш новый URL и поменяет адресную строку

...