與自訂控制項的使用者控制項的概觀

文章翻譯 文章翻譯
文章編號: 893667 - 檢視此文章適用的產品。
ASP.NET 支援語音資料行

與自訂控制項的使用者控制項的概觀

若要自訂您的需要此資料行的 我們想要邀請您送出您的想法,有關您感興趣的主題,而且在將來知識庫文件和支援語音資料行,處理您想要查看的問題。您可以送出您的想法和使用 Ask For It 表單的意見反應。另外還有連結至表單底部的 這個資料行。
全部展開 | 全部摺疊

在此頁中

簡介

嗨!這是 Parag,而且我是使用 Microsoft ASP.NET 支援群組超過一年現在支援工程師。之前要聯結 Microsoft,我曾在 Web 為主的專案和使用 Microsoft 技術的桌面應用程式。同時提供給客戶的品質支援,我曾經看過其中沒有自訂控制項周圍某些混淆,而且只是我想花點時間來說明一些自訂的控制項周圍的概念的情況。為壞它看起來如相信我,一旦您取得它的擱置,將處於於喜歡 ASP.NET 較佳的位置。

概觀

本月份的欄中,我將討論下列主題:
  • 使用者控制項是什麼?
  • 自訂控制項是什麼?
  • 使用者控制項和自訂控制項之間基本的差異有哪些?
我也將介紹幾個有關如狀態管理和自訂控制項的呈現方式的自訂控制項的進階主題。

使用者控制項是什麼?

使用者控制項是自訂、 可重複使用的控制項,而且還會使用相同 HTML 和 Web 伺服器控制項所採用的技術。它們提供一個簡單的方式來分割和在 ASP.NET Web 應用程式之間重複使用通用使用者介面。它們會使用 Web Form 網頁運作,同一個 Web Form 程式撰寫模型。如需程式設計模型的 Web Form 的詳細資訊,請造訪下列 Microsoft 開發 o 人 h 員 ? 工 u 具 ? 網路 (MSDN) 網站:
Web Form 網頁的簡介
http://msdn2.microsoft.com/en-us/library/65tcbxz3(vs.71).aspx

Web Form 程式碼模型
http://msdn2.microsoft.com/en-us/library/015103yb(vs.71).aspx

如何建立使用者控制項

您用來建立使用者控制項的語法很類似您用來建立 Web Form 網頁 (.aspx) 語法。唯一的差別在於使用者控制項不會包含 <html><body>,和 <form>元素,由於 Web Form 網頁裝載使用者控制項。若要建立使用者控制項,請依照下列步驟執行:
  1. 開啟文字或 HTML 編輯器並建立公開所有屬性、 方法和事件伺服器端程式碼區塊。
    <script language="C#" runat="server">
       public void button1_Click(object sender, EventArgs e)
       {
          label1.Text = "Hello World!!!";
       }
    </script>
    
  2. 建立使用者控制項的使用者介面。
    <asp:Label id="label1" runat="server"/>
     <br><br>
    <asp:button id="button1" text="Hit" OnClick="button1_Click" runat="server" />
    

如何在 Web Form 網頁中使用使用者控制項

  1. Microsoft Visual Studio.NET 2002年、 Microsoft Visual Studio.NET 2003年,Microsoft Visual Studio 2005 或任何文字編輯器中建立一個新的 Web Form 網頁 (.aspx)。
  2. 宣告 @ Register 指示詞。比方說,請使用下列程式碼。
    <%@ Register TagPrefix="UC" TagName="TestControl" Src="test.ascx" %>
    注意 假設使用者控制項和 Web Form 網頁是在相同的位置。
  3. 在 Web Form 網頁中使用使用者控制項,請 @ Register 指示詞之後使用下列程式碼。
    <html>
        <body>
              <form runat="server">
                   <UC:TestControl id="Test1" runat="server"/>
              </form>
        </body>  
    </html>
    

如何在程式碼後置檔案的 Web Form 網頁中以程式設計方式建立使用者控制項的執行個體

前一個範例來具現化以宣告方式在 Web Form 網頁使用 @ Register 指示詞中的使用者控制項。但是,您可以動態地具現化使用者控制項,並將其新增到網頁。以下是執行動作的步驟:
  1. 在 Visual Studio 中建立新的 Web Form 頁面。
  2. 巡覽至程式碼後置檔案產生這個 Web Form 網頁。
  3. Page_Load 事件中的 Page 類別,寫入下列 code.
    // Load the control by calling LoadControl on the page class.
    Control c1 = LoadControl("test.ascx");
                
    // Add the loaded control in the page controls collection.	
    Page.Controls.Add(c1);
    
    附註 您可以在頁面存留週期的特定事件,以動態方式加入使用者控制項。

    如需詳細資訊請造訪下列網站:
    以程式設計方式將控制項加入 Web Form 網頁
    http://msdn2.microsoft.com/en-us/library/kyt0fzt1(vs.71).aspx

    控制項執行存留週期
    http://msdn2.microsoft.com/en-us/library/aa719775(vs.71).aspx

    動態 Web 控制項]、 [回傳,] 和 [檢視] 狀態由陳俊銘嘉玲
    http://aspnet.4guysfromrolla.com/articles/092904-1.aspx

如何處理使用者控制項

會發生要求使用者控制項的網頁時,下列情況:
  • 頁面剖析器會剖析 @ Register 指示詞中的 [Src] 屬性中指定的.ascx 檔,並產生從 System.Web.UI.UserControl 類別衍生的類別。
  • 剖析器再動態編譯類別為組件。
  • 如果您使用的 Visual Studio,然後在設計階段只,Visual Studio 建立使用者] 控制項的檔背後的程式碼,並由設計工具本身先行編譯該檔案。
  • 使用者控制項的完成的動態程式碼產生和編譯程序產生的類別包括程式碼後置檔案的程式碼的最後,(ascx.cs),以及在.ascx 檔內所撰寫的程式碼。

自訂控制項是什麼?

自訂控制項是在伺服器上執行、 公開 (Expose) 物件] 模型和呈現例如 HTML 或 XML,[標記] 文字的已編譯的程式碼元件,一般的 Web Form 或使用者控制項一樣。

如何選擇基底類別,您的自訂控制項

若要撰寫自訂控制項,您應該直接或間接衍生新類別從 System.Web.UI.Control 類別或 System.Web.UI.WebControls.WebControl 類別:
  • 如果您希望控制項呈現隱藏式項目,您應該從 System.Web.UI.Control 進行衍生。為了讓範例 <meta>而且 <head>非視覺化呈現的範例。
  • 如果您希望控制項呈現會產生用戶端電腦上的視覺介面的 HTML,您應該從 System.Web.UI.WebControls.WebControl 進行衍生。
如果您想要變更的按鈕或標籤,等這類的現有控制項功能您可以直接衍生新的類別與這些現有的類別,且可以變更它們的預設行為。

在簡單 Control 類別會提供所用可以放在控制項樹狀結構的 Page 類別的基本功能。WebControl 類別會將功能加入至基底 控制項 類別,用戶端電腦上顯示視覺化內容。比方說您可以使用 WebControl 類別來控制外觀和透過如字型、 色彩和高度屬性的樣式。

如何建立及使用簡單的自訂控制項將 System.Web.UI.Control 使用 Visual Studio 延伸

  1. 啟動 Visual Studio。
  2. 建立類別庫專案,並賦予一個的名稱,例如 CustomServerControlsLib。
  3. 將原始程式檔加入至專案,例如 SimpleServerControl.cs。
  4. 在 [參考] 區段中包含 System.Web 命名空間的參考。
  5. 請檢查是否要將下列命名空間包含在 [SimpleServerControl.cs 檔案。
    System
    System.Collections
    System.ComponentModel
    System.Data
    System.Web
    System.Web.SessionState
    System.Web.UI
    System.Web.UI.WebControls
    
  6. 繼承 SimpleServerControls 類別和 控制項 的基底類別。
    public class SimpleServerControl : Control
  7. 覆寫 Render 方法,以將輸出寫入至輸出資料流。
    protected override void Render(HtmlTextWriter writer) 
    {
    	 writer.Write("Hello World from custom control");
    }
    
    附註HtmlTextWriter 類別具有寫入文字資料流的 HTML 的功能。HtmlTextWriter 類別的 Write 方法將輸出寫入 HTTP 回應資料流指定的文字,而是 Response.Write 方法相同。
  8. 編譯類別庫專案。它將會產生 DLL 的輸出。
  9. 開啟現有的或建立新的 ASP.NET Web 應用程式專案。
  10. 新增 Web Form 網頁,可以使用自訂的控制項。
  11. 將參考加入至類別庫 ASP.NET 專案之參考區段中。
  12. 登錄自訂控制項在 Web Form 網頁上。
    <%@ Register TagPrefix="CC " Namespace=" CustomServerControlsLib " Assembly="CustomServerControlsLib " %>
  13. 若要具現化,或使用 Web Form 網頁上的 [自訂] 控制,新增 [<form>標記中的 [下行程式碼]。
    <form id="Form1" method="post" runat="server">
        <CC:SimpleServerControl id="ctlSimpleControl" runat="server">
        </CC:SimpleServerControl >
    </form>
    
    注意 在這個程式碼 SimpleServerControl 是控制項類別名稱,在類別庫內。
  14. 執行 Web Form] 頁面,您會看到自訂控制項的輸出。
如果沒有使用 Visual Studio 需要執行下列步驟執行:
  1. 開啟 [任何文字編輯器]。
  2. 建立名為 SimpleServerControl.cs,檔案,並撰寫程式碼,以指定在步驟 1 至 14。
  3. 在 PATH] 變數加入下列路徑:
    c:\windows (winnt)\Microsoft.Net\Framework\v1.1.4322
  4. 啟動命令提示字元,然後移至 SimpleServerControl.cs 會出現的位置。
  5. 執行下列命令:
    csc /t:library/out: CustomServerControlsLib。SimpleServerControl.dll /r:System.dll /r:System.Web.dll SimpleServerControl.cs
    如需有關 C# 編譯器 (csc.exe) 的詳細資訊,請造訪下列 MSDN 網站:
    http://msdn2.microsoft.com/en-us/library/1700bbwd(vs.71).aspx
  6. 若要執行 Web Form 網頁上的自訂控制項,請執行下列動作:
    1. 建立 [wwwroot] 資料夾下的目錄。
    2. 啟動 Microsoft 網際網路資訊服務 (IIS) 管理員 」,且將標示為虛擬根目錄新目錄。
    3. 建立新的目錄下的 Bin 資料夾。
    4. 將自訂控制項 DLL 複製到 [Bin] 資料夾中。
    5. 將放置在新的目錄內先前的步驟中建立的範例 Web Form 網頁。
    6. 執行範例頁面從 IIS 管理員。
我們現在建立簡單的自訂控制項來看看如何公開 (Expose) 屬性,並在該自訂控制項上套用設計階段屬性。

如何公開自訂控制項的屬性

我將會建置上先前的範例,並引入一或多個您可以使用 Web Form 網頁上的自訂控制項時設定的屬性。

下列範例顯示如何將顯示一個訊息從控制項的屬性定義特定數量的控制項的屬性中所指定的時間:
  1. 在文字編輯器中開啟 SimpleServerControl.cs。
  2. 將屬性加入 SimpleServerControl 類別中。
    public class SimpleServerControl : Control
    {
       private int noOfTimes;
       public int NoOfTimes
       {
           get { return this.noOfTimes; }
           set { this.noOfTimes = value; }
       } 
       protected override void Render (HtmlTextWriter writer)
       {
         for (int i=0; i< NoOfTimes; i++)
         {
           write.Write("Hello World.."+"<BR>");
         } 
       }
    }
    
  3. 編譯自訂控制項。
  4. 若要將 Web Form 網頁上的自訂控制項將新的屬性加入至控制項宣告中。
    <CC:SimpleServerControl id="ctlSimpleControl" NoOfTimes="5" runat="server"></CC:SimpleServerControl>
  5. 執行網頁會顯示訊息"Hello 世界 」 從自訂控制項的次數為控制項的屬性中指定。

如何在自訂控制項上套用設計階段屬性

為什麼需要設計階段屬性
您在前一個範例中所建置的自訂控制項運作方式如所預期般。不過,如果想在 Visual Studio 中使用該控制項可能會希望 NoOfTimes 屬性會自動反白顯示在 [屬性] 視窗中每當您在設計階段選取自訂的控制項。

若要將此發生,您需要,您可以使用一項功能在 Visual Studio 中稱為屬性來進行的 Visual Studio 提供中繼資料資訊。 屬性可以定義一個類別、 方法、 一個屬性或欄位。Visual Studio 載入自訂控制項類別時, 檢查在類別、 方法、 屬性或欄位層級定義任何屬性並在設計階段會隨之改變自訂控制項的行為。

如果要找到更多有關屬性的資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/Aa288059(VS.71).aspx
讓我們來建置常使用的範例使用屬性:
  1. 在文字編輯器中開啟 SimpleServerControl.cs。
  2. 介紹一些基本屬性類別] 層級,例如 DefaultPropertyToolboxDataTagPrefixAttrbute。我們將會建置我們範例上這些三個屬性
            [
    	// Specify the default property for the control.		
    	DefaultProperty("DefaultProperty"),
    	
    	// Specify the tag that is written to the aspx page when the
            // control is dragged from the Toolbox to the Design view. 
    	// However this tag is optional since the designer automatically 
    	// generates the default tag if it is not specified.		
    	ToolboxData("<{0}:ControlWithAttributes runat=\"server\">" +
    		"</{0}:ControlWithAttributes>")
    	]
    	public class ControlWithAttributes : Control
    	{
    		private string _defaultProperty;
    		public string DefaultProperty
    		{
    			get { return "This is a default property value"; }
    			set { this._defaultProperty = value; }
    		}
    
    		protected override void Render(HtmlTextWriter writer)
    		{
    			writer.Write("Default Property --> <B>" + 
    			DefaultProperty + "</B>");
    		}
             }
    
  3. 沒有一個稱為 TagPrefixAttrbute 的多個標記。它是將控制項從工具箱拖曳至設計工具時,提供標記前置詞的組件層級屬性。 否則,設計工具會依預設產生例如 cc1 」 前置詞。TagPrefixAttrbute 不會直接套用至控制項類別。若要套用 TagPrefixAttrbute、 開啟 [AssemblyInfo.cs,包括下列程式碼,然後重建該專案
    [assembly:TagPrefix("ServerControlsLib ", "MyControl")]
    筆記,如果您想要建置使用命令] 列來源您需要建立 AssemblyInfo.cs 檔案、 將包含所有原始程式檔,目錄中的檔案並執行下列命令來建置控制項:
    > csc /t:library/out: ServerControlsLib.dll /r:System.dll /: System.Web.dll *.cs

使用者控制項和自訂控制項之間基本的差異有哪些?

既然已經擁有的使用者控制項和自訂控制項是什麼,以及如何建立它們的基本概念,讓我們來看這兩個差異快速看。
摺疊此表格展開此表格
因素使用者控制項自訂控制項
部署針對單一應用程式案例

部署在來源表單 (.ascx) 以及與應用程式的原始程式碼

如果需要一個以上的應用程式中使用相同的控制項,它介紹冗餘和維護問題
設計,讓它可由多個應用程式

部署應用程式的 Bin 目錄或全域組件快取

分散式輕鬆且不冗餘和維護的相關問題
建立建立是類似於 Web Form 網頁是建立 ; 適合快速應用程式開發 (RAD) 的方式書寫牽涉到大量程式碼,因為沒有設計工具支援
內容一個更好的選擇當您需要固定的配置中的靜態內容,例如當您讓頁首和頁尾更多適合應用程式需要動態內容會顯示 ; 可重複使用的應用程式跨,例如對資料繫結與動態的資料列的表格控制項
設計書寫並不需要多應用程式,設計的因為它們在設計階段所撰寫,而且大多是包含靜態資料從頭撰寫需要清楚瞭解控制項的存留週期和訂單事件執行的是通常搞定的使用者控制項中

進階的主題

接下來,讓我們看看幾個進階的功能可能會在開發自訂控制項使用。

狀態管理

是無狀態的 HTTP 上建置 Web 應用程式。頁面和它的子控制項在每個要求上建立,並要求後處置。若要維護狀態傳統 ASP 程式設計中的,您可以使用工作階段和應用程式物件。但是該,您需要執行大量撰寫程式碼。若要避免這個問題,ASP.NET 提供了稱為檢視狀態的幾個要求之間維護狀態的機制。若要進一步瞭解狀態管理和檢視狀態,請造訪下列 MSDN 網站:
Web Form 狀態管理簡介
http://msdn2.microsoft.com/en-us/library/75x4ha6s(vs.71).aspx

ASP.NET 檢視狀態
http://msdn.microsoft.com/msdnmag/issues/03/02/cuttingedge/default.aspx

儲存 Web Form 網頁使用檢視狀態的值
http://msdn2.microsoft.com/en-us/library/4yfdwycw(vs.71).aspx
使用檢視狀態在自訂控制項範例
ViewStateExample.cs
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Text;

namespace ServerControlLib
{
	/// <summary>
	/// When a page framework reloads this control after postback, it   
        /// will restore the values which are in view state.
	/// This control can easily perform state management without 
        /// implementing our own logic for maintaining the state.
	/// </summary>
	public class ViewStateExample : WebControl
	{
		// Text to be displayed in Text box control.
		private string _text;
		
		/*
		 * This property needs to be populated before every 
                 * postback in order to 
		 * retain its value.
		*/ 
		public string Text
		{
			get { return (_text == null) ? "_text property is empty"  : _text; }
			set { _text = value; }
		}

		/*
		 * This property needs to be filled once and should be 
                 * available on the successive postbacks.
		*/ 
		public string TextInViewState
		{
			get
			{
				object o = ViewState["TextInViewState"];
				return (o == null) ? "View state is empty" : (string)o;
			}
			set { ViewState["TextInViewState"] = value; } 
		}

		/*
		 * Over-ridden method on WebControl base class which                   
                 * displays both of the property values 
		 * i.e. one stored in view state and other which is not 
                 * saved in view state.
		*/
		protected override void RenderContents(HtmlTextWriter writer)
		{
			writer.Write("Text Without View State = ");
			writer.Write(Text);
			writer.Write("<hr><br>");
			writer.Write("Text In View State = ");
			writer.Write(TextInViewState);
		}
	}
}
使用 Web Form 網頁上所選的控制項範例
ViewStateExampleDemo.aspx
<%@ Page Language="C#" %>
<%@ Register TagPrefix="CC" Namespace="ServerControlLib" Assembly = "ServerControlLib" %>

<html>
  <head>
    <script runat="server">
      void button1_Click(object sender, EventArgs e)
      {
          Control1.Text = textbox1.Text;
          Control1.TextInViewState = textbox2.Text;
      }
    </script>
  </head>
  <body>
    <form runat="server" ID="Form1">
      <br>
      Property Value Without View State: <asp:TextBox id="textbox1" 
        runat="server" />
      <br>
      Property Value with View State: <asp:TextBox id="textbox2" 
        runat="server" />

      <asp:Button text="Cause Postback" onClick="button1_Click" 
        id="button1" Runat="server" />

      Output from the ViewStateExample Control :
      <CC:ViewStateExample id="Control1" runat="server"/>
    </form>
  </body>
</html>

呈現

本章節中我將簡短地說明當您從 Control 類別或 WebControl 類別衍生自訂控制項時,應該覆寫哪種方法。
呈現 System.Web.UI.Control 類別的方法
如需有關資訊呈現方法 System.Web.UI.Control 類別的請造訪下列 MSDN 網站:
Control.Render 方法
http://msdn2.microsoft.com/en-us/library/system.web.ui.control.render(vs.71).aspx

Control.RenderControl 方法
http://msdn2.microsoft.com/en-us/library/system.web.ui.control.rendercontrol(vs.71).aspx

Control.RenderChildren 方法
http://msdn2.microsoft.com/en-us/library/system.web.ui.control.renderchildren(vs.71).aspx
在頁面上控制項的呈現方式
每一頁有控制項樹狀結構,表示該網頁的所有子控制項的集合。要呈現控制項樹狀結構,HtmlTextWriter 類別的一個物件被建立,包含 HTML 來呈現在用戶端電腦上。該物件傳遞給 RenderControl 方法。依序 RenderControl 方法叫用 Render 方法。然後,Render 方法上進行遞迴迴圈,直到到達集合結尾每個子控制項呼叫 RenderChildren 方法。這個處理程序最能說明由下列的範例程式碼。
public void RenderControl(HtmlTextWriter writer) 
{
    // Render method on that control will only be called if its visible property is true.
    if (Visible)
    {
        Render(writer);
    }
}

protected virtual void Render(HtmlTextWriter writer) 
{
    RenderChildren(writer);
}
protected virtual void RenderChildren(HtmlTextWriter writer) 
{
    foreach (Control c in Controls) 
    {
        c.RenderControl(writer);
    }
} 
呈現 System.Web.UI.WebControl 類別的方法
如需有關資訊呈現方法 System.Web.UI.WebControl 類別的請造訪下列 MSDN 網站:
WebControl.RenderBeginTag 方法
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.renderbegintag(vs.71).aspx

WebControl.RenderContents 方法
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.rendercontents(vs.71).aspx

WebControl.RenderEndTag 方法
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.webcontrol.renderendtag(vs.71).aspx
WebControl 類別的呈現方式會發生
在下列程式碼範例中,示範了 Render 方法為自訂控制項。
protected override void Render(HtmlTextWriter writer)
{
    RenderBeginTag(writer);
    RenderContents(writer);
    RenderEndTag(writer);
}
您不需要覆寫 RenderWebControl 類別的方法。如果想要呈現 WebControl 類別內的內容需要覆寫 RenderContents 方法。不過,如果您仍然想要覆寫 Render 方法,您必須覆寫 RenderBeginTag 方法,以及特定先前的程式碼範例所示的順序 RenderEndTag 方法。

結論

這是所有目前使用者控制項和 ASP.NET 1.0 和 ASP.NET 1.1 中的自訂控制項上。我希望本專欄中協助您瞭解它們和各種不同的方法可以用來開發它們之間基本的差異。

感謝您的時間。我們預期在不久的將來撰寫更多關於例如狀態管理、 控制項的樣式、 複合控制項和自訂控制項的設計階段支援的自訂控制項的進階主題。

如需關於控制項的詳細資訊,請造訪下列 MSDN 網站:
ASP.NET 伺服器控制項開發基本原則
http://msdn2.microsoft.com/en-us/library/aa310918(vs.71).aspx

廣泛的檢查的使用者控制項
http://msdn2.microsoft.com/en-us/library/ms972975.aspx

建置樣板化的自訂 ASP.NET 伺服器控制項
http://msdn2.microsoft.com/en-us/library/Aa478964.aspx

ASP.NET 伺服器控制項中的事件
http://msdn2.microsoft.com/en-us/library/aa720049(vs.71).aspx

複合控制項和使用者控制項的比較
http://msdn2.microsoft.com/en-us/library/aa719735(vs.71).aspx

開發 ASP.NET 伺服器控制項
http://msdn2.microsoft.com/en-us/library/aa719973(vs.71).aspx

開發自訂控制項: 索引概念
http://msdn2.microsoft.com/en-us/library/aa720226(vs.71).aspx

新增至 ASP.NET 控制項的設計階段支援
http://msdn2.microsoft.com/en-us/library/Aa478960.aspx
如往常請隨意送出您想要在將來解決資料行的主題或使用 Ask For It 表單的知識庫中的想法。

屬性

文章編號: 893667 - 上次校閱: 2007年11月14日 - 版次: 1.8
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0
關鍵字:?
kbmt kbhowto kbasp KB893667 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:893667
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com