Как вызвать вспомогательную функцию WebMatrix из jQuery AJAX?

У меня есть вспомогательный метод в папке App_Code, который возвращает некоторый html для отображения на странице. Как я могу сделать запрос jQuery/AJAX для вызова этого метода (передавая int в качестве параметра) и вернуть HTML, чтобы я мог отобразить его на странице?

Я искал везде и абсолютно не знаю, с чего даже начать. Я был бы признателен за любую помощь.


person Arrow    schedule 13.07.2012    source источник
comment
Вы не можете этого сделать, потому что просто сказано: код С# выполняется на стороне сервера, а JavaScript — на стороне клиента. Или это был не твой вопрос?   -  person Silvermind    schedule 13.07.2012
comment
@Silvermind Это то, о чем я думал раньше. Но я наткнулся на статью, которая показывает (и работает), как вызывать WebMethod из jQuery/AJAX, который находится внутри страницы aspx, которая возвращает значение. Но моя ситуация лишь немного отличается. В моем случае вместо вызова метода, который находится на странице ASPX, мне нужно вызвать метод, который находится внутри файла App_Code/myHelper.cs.   -  person Arrow    schedule 13.07.2012
comment
ссылка: encosia.com/   -  person Arrow    schedule 13.07.2012
comment
Я провел недели, пытаясь заставить себя работать на меня. Пока безуспешно. Но все, что я пытаюсь сделать, это AJAX некоторые вещи на моей странице. Мне просто нужно иметь возможность отображать некоторый HTML на основе некоторых результатов, поступающих из базы данных (ajax, без обновления страницы) - мне все равно, если это не вспомогательный файл, пока это ajax   -  person Arrow    schedule 13.07.2012


Ответы (2)


Добавьте еще одну страницу, которая использует вспомогательную функцию для отображения HTML, и укажите значение с помощью вызова AJAX. Например, у вас может быть страница с именем RenderHelper.cshtml:

@{
    var i = Request["id"].AsInt();
}

@Helpers.MyMethod(i)

Затем на вызывающей странице используйте функцию загрузки jQuery:

$('#elementToFill').load('RenderHelper/?id=' + some_int);
person Mike Brind    schedule 13.07.2012
comment
не могли бы вы уточнить? Я немного смущен Add another page (извините) - я думаю, -извините, я действительно сбит с толку, но я почти уверен, что понял. - person Arrow; 13.07.2012
comment
это не работает; есть ли у вас какие-либо ресурсы/документы, на которые я мог бы взглянуть? - person Arrow; 13.07.2012
comment
Что вы имеете в виду под не работает? Код, который я предоставил, является только иллюстративным. Он не предназначен для работы как есть. Вам нужно изменить myMethod на имя вашего вспомогательного метода, и вам нужно изменить #elementToFill на идентификатор элемента, в котором вы хотите отобразить HTML, и, наконец, вам нужно изменить some_int для представления значения целого числа что ваш помощник ожидает. Трудно указать вам на подходящие ресурсы, когда я не знаю, чего вы не знаете. - person Mike Brind; 13.07.2012
comment
Я только что заметил, что ваш вспомогательный файл называется myHelper.cs. Это не вспомогательный файл веб-страниц (WebMatrix). См. это: mikesdotnetting.com /Статья/173/. Используете ли вы веб-страницы или веб-формы ASP.NET? - person Mike Brind; 13.07.2012
comment
Правильно, .cs - это не вспомогательный файл, это просто опечатка в моем вопросе; мой фактический вспомогательный файл - .cshtml. Мне удалось заставить его работать, хотя он продолжает отображать верхний и нижний колонтитулы со страницы layout.cshtml. Есть ли способ отключить это только для этой страницы? - person Arrow; 13.07.2012
comment
Чтобы отключить макет, Layout = null; работает отлично. Спасибо за помощь, Майк! :-) Я рад, что вы помогли, это положило конец долгой борьбе. - person Arrow; 13.07.2012

Вы можете использовать веб-сервис.

Вызовите методы своего класса в веб-службе и вызовите веб-службу с помощью jQuery/Ajax.

Например.

Файл класса

Class MyClass
{
public static string GetName(string Name)
{
return "My name is "+Name;
}
}

Веб-служба

[WebService(Namespace = "WebService")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    [System.Web.Script.Services.ScriptService]
    public class YourNameIs : System.Web.Services.WebService
    {
        [WebMethod, ScriptMethod]
        public string GetName(string Name)
        {
            return MyClass.GetName(Name);
        }

    }

JQuery

$.ajax(
    {
        Type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "WebService.asmx/GetName",
        data: '{Name: "' + name + '"}',
        success: function (msg) {
            alert(msg.d); //set msg to any div elemts InnerHTML like $("#yourDivElement").html(msg.d);
        }
    });

Я не тестировал код, надеюсь, он даст представление.

person Matt    schedule 13.07.2012
comment
Спасибо, пользователь, очень признателен. Мне никогда не удавалось заставить какой-либо веб-сервис работать с этим конкретным веб-хостингом, который у меня есть, но это все равно хорошая работа, я могу использовать ее для другого сайта в будущем. - person Arrow; 13.07.2012