Правильный способ включить автозаполнение в формах SharePoint (Asp.Net)? - PullRequest
0 голосов
/ 11 марта 2010

В SharePoint (как WSS3, так и WSS2) существует проблема, заключающаяся в том, что формы регистрации и редактирования элементов не имеют функции автозаполнения в Internet Explorer.
То есть, если вам часто требуется одно и то же значение в каком-либо текстовом поле, вы должны ввести его вручную. Internet Explorer не предоставляет вам раскрывающийся список значений, которые вы ввели ранее. Однако в FireFox эта штука работает.

Как я узнал из этого ответа на аналогичный вопрос , это связано с тем, что Internet Explorer отключает автозаполнение на страницах с заголовками "no-cache" или "expires". SharePoint действительно отправляет не кешируемые страницы клиенту. Этот SO-ответ также говорит, что к тегу form нужно добавить autocomplete="on", он переопределяет заголовки кэша.

Я отредактировал элемент FORM на главной странице по умолчанию на моем сервере, чтобы всегда включать autocomplete="on" и - да, функция автозаполнения работает!

Однако Microsoft предупреждает нас НЕ редактировать «default.master» , так как он будет перезаписан следующим пакетом обновления или патчем.

Итак, вопрос в том, каковы мои варианты , чтобы правильно решить эту ситуацию? Я хочу, чтобы автозаполнение было включено во всей ферме серверов.

1 Ответ

2 голосов
/ 12 марта 2010

Однако Microsoft предупреждает нас НЕ отредактируйте "default.master", как это будет перезаписать следующий сервис пакет или патч.

Скопируйте и вставьте новую мастер-страницу с другим именем и используйте ее по умолчанию. Используйте либо конструктор SharePoint, либо программно установите SPWeb.MasterUrl и / или SPWeb.CustomMasterPage.

Для этого у меня есть 2 функции

  • Один, чтобы установить пользовательскую главную страницу на текущем веб-сайте
  • Другой для активации предыдущей функции на всех веб-сайтах + функция сшивания для недавно созданной сети

Проект http://img251.imageshack.us/img251/7351/ss20100312093605.png (MWSBalticovo для рабочей области собраний - у них другая главная страница)

Функция веб-области для одного веб-сайта для использования настраиваемой главной страницы.

У меня есть функция с моей собственной главной страницей:

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <Module Name="BalticovoMasterPages" List="116" Url="_catalogs/masterpage" RootWebOnly="TRUE" Path="MasterPages">
        <File Url="Balticovo.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE">
            <Property Name="ContentType"            Value="$Resources:core,MasterPage;"/>
            <Property Name="MasterPageDescription"  Value="$Resources:Balticovo,BalticovoMasterPageDescription;"/>
        </File>
        <File Url="MWSBalticovo.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE">
            <Property Name="ContentType"            Value="$Resources:core,MasterPage;"/>
            <Property Name="MasterPageDescription"  Value="$Resources:Balticovo,MWSBalticovoMasterPageDescription;"/>
        </File>
    </Module>
</Elements>

И FeatureReceiver:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPWeb web = properties.Feature.Parent as SPWeb;

    string masterUrl = "/_catalogs/masterpage/Balticovo.master";
    string mwsMasterUrl = "/_catalogs/masterpage/MWSBalticovo.master";

    if (web.CustomMasterUrl.ToLower().Contains("/mws")) //meeting workspace
        web.CustomMasterUrl = mwsMasterUrl;
    else
        web.CustomMasterUrl = masterUrl;

    web.MasterUrl = masterUrl;
    web.Update();
}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
    SPWeb web = properties.Feature.Parent as SPWeb;
    web.MasterUrl = "/_catalogs/masterpage/default.master";
    if (web.CustomMasterUrl.ToLower().Contains("/mws")) //meetng workspace
        web.CustomMasterUrl = "/_catalogs/masterpage/MWSdefault.master";
    else
        web.CustomMasterUrl = "/_catalogs/masterpage/default.master";
    web.Update();
}

2-я функция области видимости сайта для включения предыдущих функций

elements.xml (активировать первую функцию на вновь созданных веб-страницах, но не активировать на существующих):

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
    <FeatureSiteTemplateAssociation
        TemplateName="GLOBAL"
        Id="{227c6aed-f66b-482d-aea8-a2af3ca203b7}" />
</Elements>

FeatureReceiver (активировать первую функцию на существующих веб-сайтах):

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    Guid masterPageFeatureId = new Guid("{227c6aed-f66b-482d-aea8-a2af3ca203b7}");
    SPSite site = properties.Feature.Parent as SPSite;
    SPWebCollection webs = site.AllWebs;
    foreach (SPWeb web in webs)
    {
        try
        {
            if (web.Features[masterPageFeatureId] == null)
                web.Features.Add(masterPageFeatureId);
        }
        catch (InvalidOperationException)  //target feature not yet installed
        { throw; }
        catch (SPException) { } //If feature could not be activated.
        finally
        {
            if (web != null)
                web.Dispose();
        }
    }
}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
    Guid masterPageFeatureId = new Guid("{227c6aed-f66b-482d-aea8-a2af3ca203b7}");
    SPSite site = properties.Feature.Parent as SPSite;
    SPWebCollection webs = site.AllWebs;
    foreach (SPWeb web in webs)
    {
        try
        {
            if (web.Features[masterPageFeatureId] == null)
                web.Features.Remove(masterPageFeatureId);
        }
        catch (InvalidOperationException) { }
        catch (SPException) { }
        finally
        {
            if (web != null)
                web.Dispose();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...