Чтобы справиться с этим, нужно иметь веб-метод на своей странице, а затем просто передать значения непосредственно методу управления с той же сигнатурой в вашем контроле - другого способа сделать это не существует.
Другими словами, ВСЕ, что делает метод page, это вызывает метод usercontrol, поэтому он действительно маленький.Если у вас одна и та же подпись для нескольких дочерних элементов управления, вы можете передать параметр, чтобы сообщить методу страницы, какой из них вызывать / использовать.
РЕДАКТИРОВАТЬ: По запросу (очень простой пример).Вы можете найти другие примеры с более сложными типами, передаваемыми в метод на стороне сервера.например, см. мой ответ здесь: Асинхронная обратная передача Jquery .ajax на C # UserControl
Пример: Метод страницы: обратите внимание на «статическую» часть.
[WebMethod]
public static string GetServerTimeString()
{
return MyNamespace.UserControls.Menu.ucHelloWorld();
}
Пользовательский элемент управленияМетод:
public static string ucHelloWorld()
{
return "howdy from myUserControl.cs at: " + DateTime.Now.ToString();
}
Клиентский ajax через jquery:
$(document).ready(function()
{
/***************************************/
function testLoadTime(jdata)
{
$("#timeResult").text(jdata);
};
$("#testTimeServerButton").click(function()
{
//alert("beep");
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{}",
dataFilter: function(data)
{
var msg;
if (typeof (JSON) !== 'undefined' &&
typeof (JSON.parse) === 'function')
msg = JSON.parse(data);
else
msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
},
url: "MyPage.aspx/GetServerTimeString",
success: function(msg)
{
testLoadTime(msg);
}
});
});
});
Примечание: dataFilter: function (data) ... часть ajax такова, что он работает с 2.0 и 3.5asp.net ajax без изменения кода клиента.