Мастер-страница с Aspx-страницей, содержащей приложение Silverlight - PullRequest
0 голосов
/ 14 июля 2010

При создании нового приложения Silverlight VS2010 создает следующую страницу с расширением aspx

<%@ Page Language="C#"  AutoEventWireup="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>SilverlightApp2</title>
    <style type="text/css">
    html, body {
        height: 100%;
        overflow: auto;
    }
    body {
        padding: 0;
        margin: 0;
    }
    #silverlightControlHost {
        height: 100%;
        text-align:center;
    }
    </style>
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript">
        function onSilverlightError(sender, args) {
            var appSource = "";
            if (sender != null && sender != 0) {
              appSource = sender.getHost().Source;
            }

            var errorType = args.ErrorType;
            var iErrorCode = args.ErrorCode;

            if (errorType == "ImageError" || errorType == "MediaError") {
              return;
            }

            var errMsg = "Unhandled Error in Silverlight Application " +  appSource + "\n" ;

            errMsg += "Code: "+ iErrorCode + "    \n";
            errMsg += "Category: " + errorType + "       \n";
            errMsg += "Message: " + args.ErrorMessage + "     \n";

            if (errorType == "ParserError") {
                errMsg += "File: " + args.xamlFile + "     \n";
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            else if (errorType == "RuntimeError") {           
                if (args.lineNumber != 0) {
                    errMsg += "Line: " + args.lineNumber + "     \n";
                    errMsg += "Position: " +  args.charPosition + "     \n";
                }
                errMsg += "MethodName: " + args.methodName + "     \n";
            }

            throw new Error(errMsg);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server" style="height:100%">
    <div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
          <param name="source" value="ClientBin/SilverlightApp2.xap"/>
          <param name="onError" value="onSilverlightError" />
          <param name="background" value="white" />
          <param name="minRuntimeVersion" value="4.0.50401.0" />
          <param name="autoUpgrade" value="true" />
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
              <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
          </a>
        </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div>
    </form>
</body>
</html>

Я не уверен, как изменить страницу, чтобы она использовала мою мастер-страницу

<%@ Page Language="C#"  MasterPageFile="~/Site.master" AutoEventWireup="true" %>

Спасибо

Ответы [ 4 ]

1 голос
/ 20 сентября 2011

Слишком поздно отвечать, но может быть полезно для других людей, которые ищут ответ.

Весь код JavaScript идет в заголовок-заполнитель и был ранее заявлен DaveB.

<asp:Content ID="Content1" ContentPlaceHolderID="MySiteMasterHeaderPlaceholder" Runat="Server">
    // JavaScript code goes here
</asp:Content>

Вы не используете второй тег формы внутри тега содержимого, поскольку он уже был объявлен на главной странице.

<asp:Content ID="Content2" ContentPlaceHolderID="MySiteMasterContentPlaceholder" Runat="Server">   
    <div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="730px" height="250px">
            <param name="source" value="MainAssetsSearch.xap" />
            <param name="onError" value="onSilverlightError" />
            <param name="background" value="white" />
            <param name="minRuntimeVersion" value="4.0.50826.0" />
            <param name="autoUpgrade" value="true" />
            <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
                <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none" />
            </a>
        </object>
        <iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px" />
    </div>
</asp:Content>

И избегайте использования width="100%" и height="250%", потому что Firefox не будет отображать содержимое Silverlight.

0 голосов
/ 15 июля 2010

Это то, что вы предлагаете?

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApp2.WebForm1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<form id="form1" runat="server" style="height:100%;">
  <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <div  style="height:100%;">
      <asp:Silverlight ID="Xaml1" runat="server" 
        Source="ClientBin/SilverlightApp2.xap" MinimumVersion="2.0" Width="100%" 
        Height="100%" />
   </div>
</form>
</asp:Content>

Это дает мне следующую ошибку

The type or namespace name 'Silverlight' does not exist in the namespace 'System.Web.UI.WebControls' (are you missing an assembly reference?)   

однако созданная VS2010 страница отлично работает в том же проекте

0 голосов
/ 15 июля 2010

Дайте это попробовать. Это должно быть близко. Идея состоит в том, чтобы поместить свой стиль и части Javascript в элемент управления содержимым для головной части страницы и поместить код Silverlight в элемент управления содержимым для тела страницы.

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="BmwConfig.WebApp2.WebForm1" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 

<style type="text/css"> 
    html, body { 
        height: 100%; 
        overflow: auto; 
    } 
    body { 
        padding: 0; 
        margin: 0; 
    } 
    #silverlightControlHost { 
        height: 100%; 
        text-align:center; 
    } 
    </style> 
    <script type="text/javascript" src="Silverlight.js"></script> 
    <script type="text/javascript"> 
        function onSilverlightError(sender, args) { 
            var appSource = ""; 
            if (sender != null && sender != 0) { 
              appSource = sender.getHost().Source; 
            } 

            var errorType = args.ErrorType; 
            var iErrorCode = args.ErrorCode; 

            if (errorType == "ImageError" || errorType == "MediaError") { 
              return; 
            } 

            var errMsg = "Unhandled Error in Silverlight Application " +  appSource + "\n" ; 

            errMsg += "Code: "+ iErrorCode + "    \n"; 
            errMsg += "Category: " + errorType + "       \n"; 
            errMsg += "Message: " + args.ErrorMessage + "     \n"; 

            if (errorType == "ParserError") { 
                errMsg += "File: " + args.xamlFile + "     \n"; 
                errMsg += "Line: " + args.lineNumber + "     \n"; 
                errMsg += "Position: " + args.charPosition + "     \n"; 
            } 
            else if (errorType == "RuntimeError") {            
                if (args.lineNumber != 0) { 
                    errMsg += "Line: " + args.lineNumber + "     \n"; 
                    errMsg += "Position: " +  args.charPosition + "     \n"; 
                } 
                errMsg += "MethodName: " + args.methodName + "     \n"; 
            } 

            throw new Error(errMsg); 
        } 
    </script> 

</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<form id="form1" runat="server" style="height:100%;"> 
   <div id="silverlightControlHost"> 
        <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%"> 
          <param name="source" value="ClientBin/SilverlightApp2.xap"/> 
          <param name="onError" value="onSilverlightError" /> 
          <param name="background" value="white" /> 
          <param name="minRuntimeVersion" value="4.0.50401.0" /> 
          <param name="autoUpgrade" value="true" /> 
          <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none"> 
              <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/> 
          </a> 
        </object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe></div> 
</form> 
</asp:Content> 
0 голосов
/ 14 июля 2010

Это действительно очень просто ... просто рассматривайте файл xap как еще один Flash или любой другой сторонний элемент управления, который вам нужен на вашей странице.

Просто создайте WebContentForm, унаследуйте его от любой мастер-страницы и затем перейдите по ссылке в приведенной ниже статье о том, как интегрировать SL в aspx-страницу.

Вот подробная информация о том, как вы можете интегрировать XAP различными способами: http://msdn.microsoft.com/en-us/library/cc838145%28VS.95%29.aspx

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...