#sitecore #sitecore8 #sitecore-mvc
#sitecore #sitecore8 #sitecore-mvc
Вопрос:
Я пытаюсь создать новый элемент Sitecore, используя решение Visual Studio. Но когда я вызываю главную базу данных, я получаю сообщение об ошибке Could Not read Sitecore Configuration
. Я знаю, что этот вопрос уже задавался, но предоставленное решение мне непонятно.
Может кто-нибудь, пожалуйста, указать мне, какие именно значения публикации могут быть переопределены моим файлом web.config, чтобы я мог это исправить.
Другое решение, которое предоставляется, — предоставить пользователю IIS доступ для редактирования / изменения к папке веб-сайта. У меня это не сработало.
public class MyItem
{
public void CreateItem()
{
using (new Sitecore.SecurityModel.SecurityDisabler())
{
Sitecore.Data.Database masterDB = Factory.GetDatabase("master");
Item parentItem = masterDB.GetItem(new ID("{140DC116-E743-4C02-9F08-CB73151A5163}"));
TemplateItem template = masterDB.GetTemplate(new ID("{C9B284A6-0427-4296-8217-E8A3F728D8F0}"));
parentItem.Add("RanjitAsset1", template);
}
}
}
Комментарии:
1. Можете ли вы добавить код, который вы используете, к вопросу?
2. Да, вот мой код:
3. Я не вижу код.
4. Добавьте код к вашему исходному вопросу. Добавление кода в комментарии делает его очень трудным для чтения.
5. Хорошо, можете ли вы проверить строку подключения к основной базе данных name.is это «мастер»?
Ответ №1:
Проблема может возникнуть из-за того, что ваш web.config переопределяется по умолчанию ASP.net web.config после того, как вы опубликуете свое решение из VS.
Можете ли вы сравнить файл web.config вашего веб-сайта с файлом из чистой установки sitecore?
Ответ №2:
Андрей прав. Проверьте web.config, возможно, он был перезаписан при публикации из Visual Studio.
<site
name="website"
virtualFolder="/"
physicalFolder="/"
rootPath="/sitecore/content"
startItem="/home"
language="en"
**database="web"**
domain="extranet"
allowDebug="true"
cacheHtml="true"
htmlCacheSize="10MB"
enablePreview="true"
enableDebugger="true" />
Если вы хотите изменить имя базы данных, вы можете сделать это в режиме рабочего стола. Или, добавив ?sc_content=[database] в качестве параметра строки запроса.
Используя API, вы можете переключить контекст, используя SoteContext, и получить элемент. Кроме того, используйте метод SelectSingleItem, он ищет элемент в папке, если он существует, он обновит его, в противном случае он его создаст.
<!-- language: lang-cs -->
public class MyItem
{
public void CreateItem()
{
SiteContext targetSiteContext = SiteContext.GetSite(sitename);
using (var context = new SiteContextSwitcher(targetSiteContext))
{
using (new Sitecore.SecurityModel.SecurityDisabler())
{
// do something on the new site context
var title = @"You title goes here";
var parentItem = Sitecore.Context.Database.GetItem(new Data.ID("{140DC116-E743-4C02-9F08-CB73151A5163}"));
var template = Sitecore.Context.Database.GetTemplate(new Data.ID("{C9B284A6-0427-4296-8217-E8A3F728D8F0}"));
var newItem = Sitecore.Context.Database.SelectSingleItem(parentItem.Paths.Path "//*[@@name='" title "']") ?? template.CreateItemFrom(title, parentItem);
try
{
newItem.Editing.BeginEdit();
newItem.Fields["NewsTitle"].Value = title;
//Rest of the fields go here
newItem.Editing.AcceptChanges();
newItem.Editing.EndEdit();
}
catch (Exception ex)
{
Diagnostics.Log.Error("Crawl Error: ", ex);
newItem.Editing.CancelEdit();
}
}
}
}
}