JQuery, ASCX и webmethods не работают - PullRequest
2 голосов
/ 24 апреля 2010

У меня есть каскадный выпадающий список (3 из них) Тип, Категории и Подкатегории. Сначала введите тип загрузки и после выбора типа, загрузки категории и выбора категории, загрузки подкатегории. Также у меня есть 2 кнопки: «Добавить категорию» и «Добавить подкатегорию». После нажатия на эти кнопки я вызываю модальную форму JQuery, чтобы добавить их. Я использую Webmethod в коде позади, чтобы добавить их в базу данных

Это прекрасно работает на странице ASPX.

Поскольку мне нужно использовать это на 3-4 страницах, я подумал о том, чтобы сделать это как пользовательский контроль (ASCX). Когда я пытаюсь использовать это на веб-странице, веб-методы в ASCX не вызываются.

Мой подход правильный? что нужно сделать для моего сценария

Жду ваших предложений.

Заранее спасибо Картик

Ответы [ 2 ]

6 голосов
/ 01 июня 2010

Не думаю, что вы можете использовать WebMethod в элементе управления ASCX. Я решил это для своей проблемы следующим образом:

AJAXBridge:

namespace Demo{
public partial class AjaxBridge : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    [WebMethod(EnableSession = true)]
    public static string Control_GetTest()
    {
        return Control.GetTest();
    }
}}

Control.ascx.cs

namespace Demo{
public partial class Control : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    HttpContext.Current.Session["test"] = DateTime.Now.ToString();
    }

    // ALMOST A WEB METHOD
    public static string GetTest()
    {
        return " is " + HttpContext.Current.Session["test"];
    }
}}

Control.ascx

<script type="text/javascript">    
var dataSend = {};

$.ajax({
    type: "POST",
    url: "AjaxBridge.aspx/Control_GetTest",
    data: dataSend,
    cache: false,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    beforeSend: function(data) {
        alert("before");
    },
    success: function(data) {
        alert("Page Load Time from Session " + data.d);
    },
    fail: function() {
        alert("fail");
    }
});    </script>

Итак, у вас есть один ASPX, который действует как интерфейс для всех методов AJAX во всех ваших веб-элементах управления. Есть также некоторые преимущества, такие как обзор и контроль всех открытых WebMethods, что значительно облегчает решение вопросов безопасности (например, с аннотациями).

0 голосов
/ 25 апреля 2010

Был ли ваш веб-метод статическим методом в коде, который был помечен атрибутом WebMethod, как описано в разделе «Вызов статических методов на веб-странице ASP.NET» здесь до его перемещения? Если это так, этот тип веб-метода работает только на уровне страницы и не может использоваться в пользовательском контроле. В качестве альтернативы прочитайте первые два раздела этой страницы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...