วิธีที่ดีที่สุดในการแบ่งปันการควบคุม ASP.NET .ascx ไปยังแอปพลิเคชันเว็บไซต์ต่างๆ

สมมติว่าคุณมีแอปพลิเคชัน ASP.NET ที่แตกต่างกัน 2 ตัวใน IIS นอกจากนี้ คุณมีตัวควบคุม ASCX บางอย่างที่คุณต้องการแชร์ระหว่างแอปพลิเคชัน 2 รายการนี้

อะไรคือวิธีที่ดีที่สุดในการสร้าง "ไลบรารีการควบคุมผู้ใช้" เพื่อให้คุณสามารถใช้การควบคุมแบบเดียวกันใน 2 แอปพลิเคชันโดยไม่ต้องทำซ้ำโค้ด

ส่วนควบคุมมี ASCX พร้อมโค้ด HTML + อยู่ด้านหลัง


การควบคุมแบบผสมจะเป็นเรื่องยาก เนื่องจากเราทำงานร่วมกับนักออกแบบที่ใช้ไวยากรณ์ HTML ในไฟล์ ASCX เพื่อจัดสไตล์การควบคุม

ทันดี้ เราใช้ SVN ที่นี่ คุณมีตัวอย่างเกี่ยวกับวิธีนำข้อเสนอแนะของคุณไปปฏิบัติหรือไม่? SVN จะแชร์การควบคุม ASP.NET ได้อย่างไร

ขอบคุณ!


person LeoD    schedule 26.08.2008    source แหล่งที่มา


คำตอบ (10)


คุณจะต้องสร้างตัวควบคุมแบบผสมแทนตัวควบคุม .ASCX หากคุณต้องการใช้ตัวควบคุมเหล่านั้นในโปรเจ็กต์ที่แยกจากกัน

person Eric Z Beard    schedule 26.08.2008

Scott Guthrie ให้คำแนะนำดีๆ เกี่ยวกับวิธีตั้งค่าโปรเจ็กต์ไลบรารีการควบคุมผู้ใช้ จากนั้นใช้เหตุการณ์ที่สร้างไว้ล่วงหน้าเพื่อคัดลอกการควบคุมผู้ใช้ไปยังหลายโปรเจ็กต์ มันทำงานได้ดีจริงๆ

http://webproject.scottgu.com/CSharp/usercontrols/usercontrols.aspx

person Community    schedule 26.08.2008
comment
ฉันดูเซิร์ฟเวอร์ของโซลูชันเหล่านี้แล้ว และนี่เป็นวิธีที่ง่ายที่สุดหากคุณมีการควบคุมผู้ใช้อยู่แล้วเพื่อแชร์ระหว่างเว็บไซต์ - person Tom Brown; 04.03.2011

นอกเหนือจากสิ่งที่ Tundey พูดแล้ว ส่วนขยายเชลล์ NTFS Link ยังมีประโยชน์เมื่อต้องแชร์เนื้อหาจำนวนมาก (เช่น โฟลเดอร์ที่มี .ascx/.aspx) ระหว่างโปรเจ็กต์อิสระอื่นๆ ในกรณีของโค้ด ฉันคิดว่าควรทำสำเนาที่ใช้งานได้อีกจาก VCS จะดีกว่า

person esteewhy    schedule 17.12.2008

ดูสิ่งนี้: http://www.codeproject.com/KB/aspnet/ASP2UserControlLibrary.aspx?msg=1782921

person chugh97    schedule 27.01.2010
comment
บทความดีๆ ได้ผล! คำตอบของคุณจะดีกว่ามากหากคุณสามารถสรุปเนื้อหาของบทความได้ - person Martin Braun; 16.03.2017

อีกทางเลือกหนึ่งคือการใช้เครื่องมือควบคุมแหล่งที่มาของคุณเพื่อ "แชร์" การควบคุม ASCX ระหว่างเว็บแอปของคุณ สิ่งนี้จะช่วยให้คุณสามารถเปลี่ยนแปลงการควบคุมในแอปพลิเคชันใดก็ได้และมีการควบคุมแหล่งที่มาเพื่อให้แน่ใจว่าการเปลี่ยนแปลงนั้นสะท้อนให้เห็นในเว็บแอปของเรา

person Tundey    schedule 26.08.2008

ฉันจัดการเรื่องนี้ได้โดยเสียสละความง่ายในการสร้างส่วนควบคุมตั้งแต่แรก

คุณสามารถสร้างโครงการไลบรารีควบคุมที่จะสร้าง DLL ไลบรารีควบคุมให้กับคุณได้ ข้อเสียเปรียบคือคุณต้องสร้างส่วนควบคุมด้วยโค้ดเท่านั้น ในโครงการล่าสุดของฉัน นี่เป็นเรื่องปกติ ในการควบคุมที่ซับซ้อนมากขึ้น นี่อาจเป็นปัญหาได้

นี่คือตัวอย่าง:

<DefaultProperty("Text"), ToolboxData("<{0}:BreadCrumb runat=server />")> _
Public Class BreadCrumb
    WebControl

    <Bindable(True)> _
    Property Text() As String
        '...'
    End Property

    Protected Overrides Sub RenderContents(output as HtmlTextWriter)
        output.write(Text)
    End Sub

    Private Sub Page_Load(...) Handles MyBase.Load
        ' Setup your breadcrumb and store the HTML output '
        ' in the Text property '
    End Sub
End Class

ทุกสิ่งที่คุณใส่ในคุณสมบัติข้อความนั้นจะแสดงผล

จากนั้น การควบคุมใดๆ ที่คุณใส่ไว้ที่นี่จะสามารถทำงานได้เหมือนกับการควบคุมอื่นๆ ที่คุณใช้ เพียงนำเข้าลงในกล่องเครื่องมือของคุณ สร้างการอ้างอิงการลงทะเบียน จากนั้นวางลงในหน้า ASP

person EndangeredMassa    schedule 26.08.2008

ฉันใช้ StarTeam ที่นี่ และช่วยให้คุณสามารถ "แบ่งปัน" ออบเจ็กต์ (ไฟล์ คำขอเปลี่ยนแปลง ข้อกำหนด ฯลฯ) ไปยังหลายโฟลเดอร์ได้ ไม่แน่ใจว่า Subversion (SVN) มีคุณสมบัตินั้นหรือไม่ หากไม่เป็นเช่นนั้น ต่อไปนี้เป็นเคล็ดลับอีกอย่างหนึ่งที่คุณสามารถใช้ได้: สร้างทางแยกจากตำแหน่งหลักของตัวควบคุมไปยังตำแหน่งในโปรเจ็กต์อื่น รอยต่อก็เหมือนกับลิงก์สัญลักษณ์ Unix คุณสามารถดาวน์โหลดเครื่องมือสำหรับสร้างจุดเชื่อมต่อใน Windows ได้จากที่นี่

person Tundey    schedule 26.08.2008

ปัญหาที่ใหญ่ที่สุดที่ฉันสังเกตเห็นจากการควบคุมใน ASP.Net คือ คุณไม่สามารถรับการสนับสนุนจากนักออกแบบสำหรับทั้งการสร้างการควบคุม และ โดยใช้การควบคุมในไซต์ได้อย่างง่ายดายเมื่อคุณสร้างมันขึ้นมา วิธีเดียวที่ฉันสามารถทำได้คือสร้างการควบคุม .ascx โดยไม่มีโค้ดอยู่ข้างหลัง (เช่น: โค้ดฝั่งเซิร์ฟเวอร์ทั้งหมดอยู่ในแท็กสคริปต์ในไฟล์ .ascx พร้อมด้วยแอตทริบิวต์ runat="server") .

แต่ถึงอย่างนั้น คุณยังคงต้องคัดลอกไฟล์ .ascx ไปรอบๆ ดังนั้น หากคุณจำเป็นต้องทำการเปลี่ยนแปลง นั่นหมายถึงการอัปเดตไฟล์ในทุกตำแหน่งที่คุณเคยใช้งาน ใช่แล้ว ตรวจสอบให้แน่ใจว่ามันอยู่ในการควบคุมแหล่งที่มา

person Joel Coehoorn    schedule 26.08.2008

ฉันมีข้อเสนอแนะ เราสามารถใช้การควบคุมผู้ใช้ในหลายแอปพลิเคชันโดยการสร้างการควบคุมผู้ใช้ภายในโครงการเว็บไซต์ตามปกติ จากนั้นเปลี่ยนคุณสมบัติของเว็บไซต์ ใช้การตั้งชื่อคงที่และแอสเซมบลีหน้าเดียว จากนั้นเราสามารถใช้ dll ควบคุมผู้ใช้ในหลายแอปพลิเคชัน

person shibin    schedule 05.02.2013

ฉันเพิ่งสร้างเว็บแอปพลิเคชันที่เพิ่งอ้างอิงไฟล์ (รวมประมาณ 90 ไฟล์) จากเว็บแอปพลิเคชันเดียว (aspx, master และ ascx) โดยไม่มีปัญหามากเกินไป อย่างที่บอกว่าฉันใช้รูปแบบ MVP เวอร์ชันที่ได้รับการปรับเปลี่ยนอย่างมาก ซึ่งมีอินเทอร์เฟซมากมายและ แบบแผนเพื่อลดความซับซ้อน ระดับกลางเดียวกันและไซต์หนึ่งเป็นส่วนย่อยของอีกไซต์หนึ่ง

ปัญหาใหญ่:

  1. หน้าต้นแบบ (และในทางกลับกัน ผู้ออกแบบและการจัดรูปแบบมุมมอง html) ใช้งานไม่ได้กับไฟล์อ้างอิง ดังนั้นคุณจึงสูญเสียฟังก์ชันการทำงานไปมาก ขั้นตอนก่อนสร้างและรายการ svn:ignore จำนวนมากคือแฮ็คของฉันเกี่ยวกับเรื่องนี้ การที่ CruiseControl.NET ให้งานที่สร้างไว้ล่วงหน้าดำเนินการในโฟลเดอร์ที่ถูกต้องเป็นเรื่องที่ยุ่งยากเช่นกัน
  2. เพจ/การควบคุมที่ใช้ร่วมกันจำเป็นต้องตระหนักอย่างยิ่งถึงสิ่งที่พวกเขาสัมผัสและอ้างอิงเพื่อหลีกเลี่ยงการพึ่งพาเพิ่มเติม
  3. ทั้งสองไซต์ถูกล็อคเข้าด้วยกันเพื่อการปรับใช้
  4. ตอนนี้ฉันต้องอธิษฐานขอให้ผู้ดูแลอ่านเอกสารเล็กๆ น้อยๆ ของฉันเกี่ยวกับเรื่องยุ่งๆ ที่ฉันทำ มันอยู่นอกเหนือสิ่งที่ฉันเคยเห็นในโครงการ ASP.NET มาก

ฉันอยู่ภายใต้ความกดดันครั้งใหญ่ที่จะต้องทำให้มันใช้งานได้ และตอนนี้ทั้งสองแอปก็อยู่ในขั้นตอนการผลิตแล้ว ฉันจะไม่แนะนำ แต่ถ้าคุณสนใจเริ่มต้นที่:

เพิ่มรายการที่มีอยู่ เลือกไฟล์บางไฟล์ คลิกที่ลูกศรของปุ่ม เพิ่ม แล้วพูดว่า เพิ่มเป็นลิงก์

person Ant    schedule 02.09.2008