Frage

Ich habe eine Ausnahme, wenn ich die Anwendungsseite (/_layouts/collages/uploadcollage.aspx) im Dialogfeld mit dem Inline -Code ausführte.

Code für das Ausführen von Dialogfeld auf default.aspx Seite:

<script type="text/javascript">

//Handle the DialogCallback callback 
function DialogCallback(dialogResult, returnValue)
{
     // Occurs when upload succeeds
     if(SP.UI.DialogResult.OK == dialogResult)
     {
        this.statusId = SP.UI.Status.addStatus("Publishing complete:", "Published content available on Collages Library", true);

        SP.UI.Status.setStatusPriColor(this.statusId, "green");
     }
     // Occurs when upload throw exception
     if(SP.UI.DialogResult.cancel == dialogResult)
     {    
        this.statusId = SP.UI.Status.addStatus("Publishing failure", "An error occurs. Try again", true);
        SP.UI.Status.setStatusPriColor(this.statusId, "red");
     }
} 

//Open the Dialog 
function OpenUploadDialog()
{ 
   SP.UI.Status.removeAllStatus(true);
   var dialogOptions = SP.UI.$create_DialogOptions();
   dialogOptions.width = 600;
   dialogOptions.height = 800;
   dialogOptions.url = "/_layouts/Collages/UploadCollage.aspx";
   dialogOptions.dialogReturnValueCallback = Function.createDelegate(
                    null, DialogCallback);
   SP.UI.ModalDialog.showModalDialog(dialogOptions);
}</script><p>?</p>
<p>Click here to add new collage:</p>
<a href="javascript:OpenUploadDialog()">Add new collage</a>

UploadCollage.aspx (nur *.aspx -Datei mit Inline -Code):

<%@ Import Namespace="Microsoft.SharePoint.ApplicationPages" %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Web.UI" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Import Namespace="Microsoft.SharePoint.WebControls" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.Web" %>

<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Page Language="C#" MasterPageFile="~/_layouts/v4.master" %>

<asp:Content ID="PageHead" ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server">

<script type="text/C#" runat="server">


        protected void Page_Load(object sender, EventArgs e)
        {

        }
        private void CreateFolder(string library, string title)
        {
            using (SPSite site = SPContext.Current.Site)
            {
                using (SPWeb web = site.OpenWeb())
                {
                    try
                    {
                        SPList imagesLibrary = web.Lists[library];
                        SPListItem newFolder = imagesLibrary.Items.Add(imagesLibrary.RootFolder.ServerRelativeUrl, SPFileSystemObjectType.Folder, title);
                        newFolder.Update();
                    }
                    catch (Exception)
                    {
                        // Close dialog - JS exception
                        Context.Response.Write("<script type='text/javascript'>window.frameElement.cancelPopUp();<"+"/script>");
                        Context.Response.Flush();
                        Context.Response.End();
                    }
                }
            }
        }
        public void Click_saveButton(object sender, EventArgs e)
        {
            foreach (IValidator val in Validators)
            {
                if (!val.IsValid)
                {
                    return;
                }
            }

            CreateFolder(libraryNameTextBox.Text, collageTitleTextBox.Text);

            UploadImage(libraryNameTextBox.Text, image1FileUpload.FileContent, collageTitleTextBox.Text,
                        Path.GetExtension(image1FileUpload.FileName), "a");
            UploadImage(libraryNameTextBox.Text, image2FileUpload.FileContent, collageTitleTextBox.Text,
                        Path.GetExtension(image2FileUpload.FileName), "b");
            UploadImage(libraryNameTextBox.Text, image3FileUpload.FileContent, collageTitleTextBox.Text,
                        Path.GetExtension(image3FileUpload.FileName), "c");
            UploadImage(libraryNameTextBox.Text, image4FileUpload.FileContent, collageTitleTextBox.Text,
                        Path.GetExtension(image4FileUpload.FileName), "d");

            // Close dialog - JS commiting
            Context.Response.Write("<script type='text/javascript'>window.frameElement.commitPopup();<"+"/script>");
            Context.Response.Flush();
            Context.Response.End();
        }

        public void UploadImage(string library, Stream stream, string folder, string extension, string file)
        {
            using (SPSite site = SPContext.Current.Site)
            {
                using (SPWeb web = site.OpenWeb())
                {
                    try
                    {
                        SPList imagesLibrary = web.Lists[library];
                        SPFolder collageFolder = imagesLibrary.RootFolder.SubFolders[GetFolderID(imagesLibrary.RootFolder.SubFolders, folder)];
                        collageFolder.Files.Add(file + extension, stream);
                        collageFolder.Update();
                    }
                    catch (Exception ex)
                    {
                        // Close dialog - JS exception
                        Context.Response.Write("<script type='text/javascript'>window.frameElement.cancelPopUp();<"+"/script>");
                        Context.Response.Flush();
                        Context.Response.End();
                    }
                }
            }
        }

        private int GetFolderID(SPFolderCollection folders, string folder)
        {
            for (int i = 0; i < folders.Count - 1; i++)
            {
                if (folders[i].Item.DisplayName == folder)
                {
                    return i;
                }
            }
            return 999;
        }

</script>

<SharePoint:UIVersionedContent ID="UIVersionedContent1" UIVersion="4" runat="server">
  <contenttemplate>
      <SharePoint:CssRegistration Name="forms.css" runat="server"/>
  </contenttemplate>
</SharePoint:UIVersionedContent>

</asp:Content>

<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">

<asp:ScriptManagerProxy runat="server" ID="ProxyScriptManager">
</asp:ScriptManagerProxy>

<table width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
      <td valign="top">
          <table cellspacing="0" cellpadding="4" border="0" width="100%">
              <tr>
                  <td class="ms-vb">
                      &nbsp;
                    </td>
                </tr>
            </table>
            <table border="0" width="100%">
                <tr>
                    <td>
                        <table border="0" cellspacing="0" width="100%">
                            <tr>
                                <td class="ms-formlabel" valign="top" nowrap="true" width="25%">
                                    <b> Library Name:</b>
                                </td>
                                <td class="ms-formbody" valign="top" width="75%">
                                    <asp:TextBox ID="libraryNameTextBox" Text="Collages" runat="server" /><br />
                                    <asp:RequiredFieldValidator ID="libraryNameTextBoxRequiredFieldValidator"
                                                                ControlToValidate="libraryNameTextBox"
                                                                ErrorMessage="Pole nazwa bibioteki nie może być pusta"
                                                                runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td class="ms-formlabel" valign="top" nowrap="true" width="25%">
                                    <b> Collage Name:</b>
                                </td>
                                <td class="ms-formbody" valign="top" width="75%">
                                    <asp:TextBox ID="collageTitleTextBox" Text="Kolaż 1" runat="server" /><br />
                                    <asp:RequiredFieldValidator ID="collageTitleRequiredFieldValidator"
                                                                ControlToValidate="collageTitleTextBox"
                                                                ErrorMessage="Pole tytuł nie może być puste"
                                                                runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td width="25%" class="ms-formlabel">
                                    <b> Image A:</b>
                                </td>
                                <td width="75%" class="ms-formbody">
                                    <asp:FileUpload ID="image1FileUpload" runat="server" /><br />
                                    <asp:RequiredFieldValidator ID="image1FileUploadRequiredFieldValidator"
                                                                ControlToValidate="image1FileUpload"
                                                                ErrorMessage="Należy wskazać zdjęcie do załadowania"
                                                                runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td width="25%" class="ms-formlabel">
                                    <b> Image B:</b>
                                </td>
                                <td width="75%" class="ms-formbody">
                                    <asp:FileUpload ID="image2FileUpload" runat="server" /><br />
                                    <asp:RequiredFieldValidator ID="image2FileUploadRequiredFieldValidator"
                                                                ControlToValidate="image2FileUpload"
                                                                ErrorMessage="Należy wskazać zdjęcie do załadowania"
                                                                runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td width="25%" class="ms-formlabel">
                                    <b> Image C:</b>
                                </td>
                                <td width="75%" class="ms-formbody">
                                    <asp:FileUpload ID="image3FileUpload" runat="server" /><br />
                                    <asp:RequiredFieldValidator ID="image3FileUploadRequiredFieldValidator"
                                                                ControlToValidate="image3FileUpload"
                                                                ErrorMessage="Należy wskazać zdjęcie do załadowania"
                                                                runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td width="25%" class="ms-formlabel">
                                    <b> Image D:</b>
                                </td>
                                <td width="75%" class="ms-formbody">
                                    <asp:FileUpload ID="image4FileUpload" runat="server" /><br />
                                    <asp:RequiredFieldValidator ID="image4FileUploadRequiredFieldValidator"
                                                                ControlToValidate="image4FileUpload"
                                                                ErrorMessage="Należy wskazać zdjęcie do załadowania"
                                                                runat="server" />
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>


            <table cellspacing="0" cellpadding="4" border="0" width="100%">
                <tr>
                    <td nowrap="nowrap" class="ms-vb">
                        <asp:Button Text="Cancel" runat="server" ID="cancelButton" OnClientClick="window.frameElement.commitPopup();" />
                    </td>
                    <td nowrap="nowrap" class="ms-vb" width="99%">
                        <asp:Button Text="Publish" ID="saveButton" OnClick="Click_saveButton" runat="server" />
                    </td>
                </tr>
            </table>
        </td>
        <td width="1%" class="ms-vb" valign="top">&nbsp;</td>
    </tr>
</table>


</asp:Content>

<asp:Content ID="PageTitle" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">
    Dodawanie zdjęć do kolażu
</asp:Content>

<asp:Content ID="PageTitleInTitleArea" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" runat="server" >
    Dodawanie zdjęć do kolażu
</asp:Content>

Oben Code funktioniert nicht, wenn es im SharePoint -Dialog ausgeführt wird. Es funktioniert, wenn es ohne Dialoge ausgeführt wird. (auf url: /_layouts/collages/uploadcollage.aspx).

Jede Hilfe, um es mit dem Dialog zu arbeiten, wäre sehr geschätzt. Was könnte die Quelle des Problems sein?

War es hilfreich?

Lösung

Fragen Sie anwsert.

Ich hatte einen Fehler in meinem C# Code gemacht:

private int GetFolderID(SPFolderCollection folders, string folder)
    {
        for (int i = 0; i < folders.Count - 1; i++)
        {
            if (folders[i].Item.DisplayName == folder)
            {
                return i;
            }
        }
        return 999;
    }

Es sollte sein:

private int GetFolderID(SPFolderCollection folders, string folder)
    {
        for (int i = 0; i < folders.Count; i++)
        {
            if (folders[i].Name == folder)
            {
                return i;
            }
        }
        return 999;
    }

Nach den Korrekturen sollte es perfekt funktionieren ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top