Если вы создали приложение с --without orm
, то вы в основном отключили любую функциональность ORM / модель / база данных, которую предлагают Waterline / Sails. Это означает, что вы не можете использовать концепцию моделей, описанную в Sails.
Вы всегда можете использовать другие методы, просто делайте это, как в любом другом проекте node.js. Требуйте модуль и следуйте их документации. Проверьте http://docs.sequelizejs.com/ на наличие одного из множества доступных вариантов.
И об использовании sails-mysql, это просто «адаптер» для Watermark, который сообщает вашему соединению, что вы хотите использовать «mysql». Но это доступно только тогда, когда в вашем приложении настроена ORM.
Если бы я разрабатывал приложение без ORM, я бы создал «сервисы», называемые тогда в контроллерах. То есть создайте свою бизнес-логику в /api/services
(создайте папку, если она не существует), а затем разработайте там свое решение. Наконец позвоните им из ваших контроллеров. Вы можете проверить мой другой ответ здесь для примера
Вы, вероятно, используете MasterPage или пользовательские элементы управления (ascx), и это является причиной изменения идентификаторов клиентов. Представьте, что у вас есть элемент управления на главной странице с тем же идентификатором, что и на странице. Это приведет к столкновениям. Изменения идентификатора гарантируют, что все свойства ClientID являются уникальными на странице.
FindControl требует особого внимания при работе с MasterPages. Взгляните на ASP.NET 2.0 MasterPages и FindControl () . FindControl работает внутри контейнера имен . MastePage и страница - это разные контейнеры для именования.
I've had pretty good luck working around this problem in "most" cases with a simple extension method
You can call it on whatever higher-level container control you think best, including the Page itself if you want to scan the entire control hierarchy.
private static Control FindControlIterative(this Control control, string id)
{
Control ctl = control;
LinkedList<Control> controls = new LinkedList<Control>();
while(ctl != null)
{
if(ctl.ID == id)
{
return ctl;
}
foreach(Control child in ctl.Controls)
{
if(child.ID == id)
{
return child;
}
if(child.HasControls())
{
controls.AddLast(child);
}
}
ctl = controls.First.Value;
controls.Remove(ctl);
}
return null;
}
При рендеринге html ASP.NET префиксирует все идентификаторы элементов управления с идентификаторами контейнеров именования (пользовательские элементы управления и т. Д.) В иерархии, возвращаясь назад к документу. корень. Это гарантирует, что все идентификаторы уникальны для постбэков и т. Д.
Это не влияет на использование FindControl, где вы должны использовать идентификатор в исходной разметке.
Вот ссылка на то, как называются элементы управления веб-форм ...
Вы можете написать Extender, чтобы найти любой элемент управления на странице, используя рекурсию. Это может быть в каком-то классе Util / Helper.
public static Control FindAnyControl(this Page page, string controlId)
{
return FindControlRecursive(controlId, page.Form);
}
public static Control FindAnyControl(this UserControl control, string controlId)
{
return FindControlRecursive(controlId, control);
}
public static Control FindControlRecursive(string controlId, Control parent)
{
foreach (Control control in parent.Controls)
{
Control result = FindControlRecursive(controlId, control);
if (result != null)
{
return result;
}
}
return parent.FindControl(controlId);
}
При поиске элемента управления в коллекции элементов управления всегда используйте идентификатор, который вы присвоили элементу управления, не тот, который вы видите в исходном рендере поста. Если FindControl () не находит элемент управления, о существовании которого вы знаете, велика вероятность того, что вы выполняете поиск не в правой ветви иерархии элементов управления. Рекурсивная функция для меня оказалась успешной.
Вот мой пример того, что я использую для VB.NET 3.5:
Function FindControlRecursive(ByVal ctrl As Control, ByVal id As String) As Control
Dim c As Control = Nothing
If ctrl.ID = id Then
c = ctrl
Else
For Each childCtrl In ctrl.Controls
Dim resCtrl As Control = FindControlRecursive(childCtrl, id)
If resCtrl IsNot Nothing Then c = resCtrl
Next
End If
Return c
End Function
Вот пример того, как я бы реализовал эту функцию в моем классе базовой страницы:
Dim form HtmlForm = CType(FindControlRecursive(Me, "Form"), HtmlForm)