Только что столкнулся с этим странным поведением. По логике должно работать следующее.
@(Model.IsTablet ? "data-options='is_hover: false'" : "")
, но отображается как
data-options="'is_hover:" false'=""
Как утверждает Дэн, это работает правильно
@(Model.IsTablet ? "data-options=is_hover:false" : "")
рендеринг, как в первом примере.
data-options="is_hover:false"
, но если вы добавляете пробел в атрибут, он нарушает все странные вещи, которые делает asp.net 4.0, и думает, что ваш атрибут заканчивается этим пробелом.
И это не означает выхода html, поскольку действительный синтаксис html не работает, и весь смысл бритвы в том, что синтаксис бритвы должен работать с действительным html, а не нарушать его.
Вот предложение: переместите свои базы данных Dev и Prod в разные кластеры серверов с тем же именем .
Если вы не можете или не хотите этого делать, Я предлагаю вам найти способ параметризации имен вашей базы данных в ваших запросах.
Вы можете использовать Синонимы , чтобы упростить ваши запросы. Например:
-- Create a synonym for the Product table in AdventureWorks.
USE tempdb;
GO
CREATE SYNONYM MyProduct
FOR AdventureWorks.Production.Product;
GO
-- Query the Product table by using the synonym.
USE tempdb;
GO
SELECT ProductID, Name FROM MyProduct WHERE ProductID < 5;
GO
EDIT: Вы можете определить синонимы для рассматриваемых таблиц. Используйте синоним вместо полного имени в любом месте, где вы запрашиваете таблицы.
При развертывании в производственной среде все, что вам нужно сделать, это изменить синоним.
В зависимости от вашей ситуации, СИНОНИМ может быть лучшим ответом или, возможно, ПРОСМОТРОМ.
Пример с ПРОСМОТРОМ:
CREATE VIEW table1 AS SELECT * FROM DB1_DEV.dbo.table1
Позже, когда вы перейдете к PROD:
ALTER VIEW table1 AS SELECT * FROM DB1_PROD.dbo.table1
Как и в случае с SYNONYM, обновление волшебным образом исправляет все запросы, относящиеся к просто "table1".
Вот обсуждение, объясняющее различия между синонимами и представлениями:
Каковы плюсы и минусы использования синонима по сравнению с view?