Я думаю, вы неправильно поняли концепцию flavorDimension.
Аромат-аромат - это что-то вроде категории вкуса , и каждая комбинация аромата из каждого измерения даст вариант.
В вашем случае вы должны определить один аромат, называемый «тип», и другое измерение, называемое «организация». Он будет производить для каждого аромата в «организации» измерения все возможные «типы» (или двойную формулировку: для каждого «типа» он будет давать вариант для каждой организации).
Размеры аромата определяют декартова произведение , которое будет использоваться для создания вариантов.
EDIT: я попытаюсь проиллюстрировать код псевдограду:
Давайте определим некоторый «тип»: бронза, серебро и золото
Давайте определим некоторые организации: customerA, customerB, customerC
Все это productFlavors , но они относятся к двум различным размерам:
flavorDimensions("type_line", "organization")
productFlavors {
gold {
...
dimension = "type_line"
}
silver {
...
dimension = "type_line"
}
bronze {
...
dimension = "type_line"
}
customerA {
...
dimension = "organization"
}
customerB {
...
dimension = "organization"
}
customerC {
...
dimension = "organization"
}
}
Эта конфигурация будет производят 18 (3 * 3 * 2) варианта (если у вас есть 2 стандартных типа сборки: отладка и выпуск):
gold-customerA-debug; gold-customerA-релиз; gold-customerB-debug; gold-customerB-релиз; gold-customerC-debug; gold-customerC-релиз;
silver-customerA-debug; серебро-клиентА-релиз; silver-customerB-debug; серебро-клиентB-релиз; silver-customerC-debug; серебро-клиентC-релиз;
... (то же самое для бронзы)
Обратите внимание, что имя измерения абсолютно произвольно и не влияет на имена вариантов.
Размеры вкуса являются очень мощными, но если вы используете слишком много из них: это приводит к экспоненциальному взрыву числа вариантов (задача очистки после сборки может быть полезна для удаления бесполезного или нечувствительного варианта)
Если Вы не хотите создавать пустую страницу, Вы могли бы назвать IHttpHandler (ashx) файлом:
public class RSSHandler : IHttpHandler
{
public void ProcessRequest (HttpContext context)
{
context.Response.ContentType = "text/xml";
string sXml = BuildXMLString(); //not showing this function,
//but it creates the XML string
context.Response.Write( sXml );
}
public bool IsReusable
{
get { return true; }
}
}
То, что Вы думаете, было бы лучшим методом передачи данных IHttpHandler? Должен я добавил переменные к строке запроса или POST данные, которые я должен отправить? Единственной вещью я думаю, что должен отправить, является единственный идентификатор, но я не могу решить то, что лучший метод должен отправить идентификатору и сделать, чтобы IHttpHandler обработал ее. Я хотел бы предложить решение, которое предотвратит человека с основными компьютерными навыками от случайно или намеренно доступ к странице непосредственно
Рассмотрение обратного вызова прокладывается под землей в клиентском коде, это взяло бы кого-то с равным определением для получения или querystring или запроса POST. IE, если у них есть поджигатель, Ваш одинаково завинченный.
Так, в этом случае сделайте то, что является самым легким Вам (Подсказка: я просто использовал бы querystring).
Для обработки повторяющихся запросов/прямого доступа я генерировал бы ключ, который отправляется с каждым запросом. Возможно, хеш текущего времени (Нечеткий, я спустился бы до минут, но не секунд из-за сетевой задержки), + клиентский IP.
Затем в HTTPHandler, выполните тот же хеш и только работайте, если они соответствуют.
Необходимо использовать Обратные вызовы ASP.NET, которые были представлены у Asp. Сетевые 2.0. Вот статья, которая должна заставить Вас набор идти:
Реализация клиентских обратных вызовов программно без обратных передач в веб-страницах ASP.NET
Править: Также посмотрите на это: ICallback & JSON Основанная Сериализация JavaScript
Вы только ограничиваетесь Ajax ASP.NET, но можете пользоваться любой сторонней библиотекой как jQuery, YUI и т.д., чтобы сделать то же самое. Можно затем просто выполнить запрос к пустой странице на сайте, который должен возвратить заголовки, которые содержат cookie.
Мой голос с предложением HTTPHandler также. Я часто использую это. Поскольку это не вызывает экземпляр класса страницы, это очень легко.
Все приемы платформы Ajax ASP.NET на самом деле инстанцируют и создают всю страницу снова на бэкенде на вызов, таким образом, они - огромные пожиратели ресурсов.
Следовательно, мой типичный стиль XmlHttpRequest назад к HttpHandler.
Так как Вы используете только ASP.NET 2.0, я рекомендовал бы, чтобы AjaxPro был, которые создают .ashx файл. Все, что необходимо сделать, должно вытянуть AjaxPro.dll в веб-сайт. Я разработал целое приложение с AjaxPro и нашел, что он работал очень хорошо. Это использует сериализацию для передачи объектов назад и вперед.
Это - просто образец о том, как просто использовать его.
namespace MyDemo
{
public class Default
{
protected void Page_Load(object sender, EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(Default));
}
[AjaxPro.AjaxMethod]
public DateTime GetServerTime()
{
return DateTime.Now;
}
}
}
Для вызова его через JavaScript, он так же прост как
function getServerTime()
{
MyDemo._Default.GetServerTime(getServerTime_callback); // asynchronous call
}
// This method will be called after the method has been executed
// and the result has been sent to the client.
function getServerTime_callback(res)
{
alert(res.value);
}
Править
Также необходимо добавить
К конфигурации. AjaxPro также работает хорошо бок о бок с Ajax APS.NET, и можно передать объекты C# от Клиента Разъединить, если класс отмечен как [сериализуемый]
Можно также использовать WebMethods, которые встроены в asp.net ajax библиотека. Вы просто создаете статический метод для codebehind и вызова страницы это от Вашего Ajax.
Существует довольно основной пример того, как сделать это здесь
Необходимо использовать веб-сервис (.asmx). С Ajax ASP.NET Microsoft можно даже автоматически сгенерировать тупики.
Просто чтобы предложить другую точку зрения, вы также можете использовать PageMethod на вашей главной странице. У Дейва Уорда есть замечательный пост, который иллюстрирует это. По сути, вы используете jQuery ajax post для вызова метода, как показано в посте Дейва:
$.ajax({
type: "POST",
url: "Default.aspx/GetFeedburnerItems",
// Pass the "Count" parameter, via JSON object.
data: "{'Count':'7'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
BuildTable(msg.d);
}
});
Нет необходимости в Asp.Net Ajax расширениях вообще.
.