Sök  
 
Skribent Inlägget Löst
Google
 
     

  Forum » ASP.NET 2.0 » Usercontrol som DLL  
 
Skriven av: jimmie | den 17 februari 2008 Kl 15:49
Usercontrol som DLL Tråden är löst
Hej, jag har en liten website i visual studio 2005.
den innehåller endast två stycken Usercontrols (ascx) i rooten samt ett par hjälpklasser som ligger i App_Code.

Jag vill få dessa till en enda DLL som kan importeras av andra projekt och därmed använda User Controlsen på enklast möjliga sätt.

jag har testat ta "publish website" men lyckas då endast med att få två olika dll'er. en som heter App_Code.dll och en som heter App_Web_cxwy2bgv.dll samt några .compiled filer.

hur gör jag för att få en enda dll med valfritt namn? som sedan kan importeras och användas direkt?


Antal svar 15



NAVIGERING: [1] 2
Skriven av: vimpyboy | den 17 februari 2008 Kl 21:40
Antingen så kör du med ett web application project, eller så har du web controls.
Skriven av: jimmie | den 17 februari 2008 Kl 22:34
Kanon! precis vad jag hade tänkt mig. thnx
Skriven av: jimmie | den 18 februari 2008 Kl 18:56
nu har jag lekt lite.
om jag skapar en user control i projektet och i page_loaden till den gör en
Response.Write() så funkar det fint

placerar jag däremot ut en <asp:literal /> på själva ascx filen och försöker binda något till den:
ltlTest.Text = DateTime.Now.ToString();

så får jag "Object reference not set to an instance of an object" när jag kör detta på websajten som jag sedan inkluderat min dll

vad gör jag för fel?
Skriven av: vimpyboy | den 18 februari 2008 Kl 20:34
Det ska fungera. Hur har du gjort?
Skriven av: jimmie | den 18 februari 2008 Kl 22:01
- jag skapade ett web application project
- i den en ny "web user control"

Test.ascx
Kod:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Test.ascx.cs" Inherits="BVExtern.Test" %>

<asp:Literal ID="ltlTest" runat="server" />



och Test.ascx.cs
Kod:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace BVExtern
{
  public partial class Test : System.Web.UI.UserControl
  {
  protected void Page_Load(object sender, EventArgs e)
  {
  Response.Write("testars");
  ltlTest.Text = DateTime.Now.ToString();
  }
  }
}



dessutom fick jag en Test.ascx.designer på köpet
Kod:

//------------------------------------------------------------------------------
// <auto-generated>
//  This code was generated by a tool.
//  Runtime Version:2.0.50727.832
//
//  Changes to this file may cause incorrect behavior and will be lost if
//  the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace BVExtern {
  
  
  /// <summary>
  /// Test class.
  /// </summary>
  /// <remarks>
  /// Auto-generated class.
  /// </remarks>
  public partial class Test {
  
  /// <summary>
  /// ltlTest control.
  /// </summary>
  /// <remarks>
  /// Auto-generated field.
  /// To modify move field declaration from designer file to code-behind file.
  /// </remarks>
  protected global::System.Web.UI.WebControls.Literal ltlTest;
  }
}




- komplierade detta.

- skapade ny web site
- add reference, browsade upp BVExtern.dll från bin mappen
- la till följande i web-config
Kod:

<pages>
    <controls>
        <add assembly="BVExtern" namespace="BVExtern" tagPrefix="bv"/>
    </controls>
</pages>



och slutligen i en ny .aspx sida i mitt web projekt angav jag

Kod:

<bv:Test ID="test1" runat="server" />



och när jag surfar till denna nya aspx-sida får jag "Object reference not set to an instance of an object"
Skriven av: jimmie | den 18 februari 2008 Kl 22:04
EDIT:
testade att ta bort min Literal och istället endast ange följande i min test.ascx sida

Kod:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Test.ascx.cs" Inherits="BVExtern.Test" %>

<h1>hoho</h1>



kompilerade och surfade nu till min aspx-sida igen.

denna gång får jag inget fel men inte heller mitt <h1>hoho</h1>.
alltså verkar allt som finns i ascx delen inte vilja vara med, endast det som görs i code-behinden till denna.

nått måste jag ha missat?
Skriven av: vimpyboy | den 18 februari 2008 Kl 22:04
Det är för att du försöker skapa en referens till en web control och inte user control i web.config. Det ska stå precis som det gör när du lägger in en vanlig user control på sidan.

Redigerad av: vimpyboy

Hmm.. Har du rätt namespace samt klassnamn till din code behind? Om du skriver till tracen eller liknande i din user controls code behind, vad händer då?

Annars bör du kika på web controls då de kompileras in direkt i en dll för att sedan köras rakt av. Du slipper alltså ascx-filerna då.

Redigerad av: vimpyboy

Du kan ta bort CodeBehind="Test.ascx.cs" från Control-direktivet då du inte längre refererar till en cs-fil.
Skriven av: jimmie | den 18 februari 2008 Kl 22:20
Citerar vimpyboy:


Det är för att du försöker skapa en referens till en web control och inte user control i web.config. Det ska stå precis som det gör när du lägger in en vanlig user control på sidan.



som vanligt? jag lägger till user control så här normalt:
Kod:

<%@ Register Src="UserControls/BVPaging.ascx" TagName="Paging" TagPrefix="bv" %>



det kan jag väl inte göra nu när jag inte har någon ascx fil i projektet? nu är ju den jag vill inkludera inbakad i dll'filen. (hoppas jag)




Hmm.. Har du rätt namespace samt klassnamn till din code behind? Om du skriver till tracen eller liknande i din user controls code behind, vad händer då?


Ja det vill jag tro, om jag kör en vanlig

Kod:

Response.Write("hej");


i code-behinden så skrivs detta ut korrekt.


Citerar vimpyboy:


Annars bör du kika på web controls då de kompileras in direkt i en dll för att sedan köras rakt av. Du slipper alltså ascx-filerna då.



nu blev jag konfundersam, jag trodde att det var det jag gjorde nu.
Är web controls en projekt-typ? jag hittar inget sådant i VS2005 när jag skall skapa nytt projekt.
Skriven av: jimmie | den 18 februari 2008 Kl 22:25
Jag kan ha missuppfattat detta, jag har ju tänkt att slippa ascx (user control) filen i web-siten, har trott att jag enkelt kan inkludera en sådan via dll'filen. men det kanske inte är möjligt.

med tanke på din sista kommentar

"Du kan ta bort CodeBehind="Test.ascx.cs" från Control-direktivet då du inte längre refererar till en cs-fil."

så misstänger jag att jag fortfarande behöver ascx filen i min web-site men kan låta den ärva från mitt BVExtern namespace
Skriven av: vimpyboy | den 18 februari 2008 Kl 23:24
Kör du med en user control så måste du ha din ascx.

http://support.microsoft.com/kb/893667
http://msdn2.microsoft.com/en-us/library/aa651710(VS.71).aspx
NAVIGERING: [1] 2
 
     

  Svara på inlägg  
 
Du måste vara medlem på ASPsidan för att kunna skriva i forumet.
För att bli medlem klicka här.
 
     

  » Logga in  
 
Användarnamn

Lösenord

 
     

  » Bli medlem  
  Bli medlem på ASPsidan!  
     

     
  Microsoft  
     

  » Partners  
  Comsolvia  
     
  » ANNONS  
  ingen annons än  
     

  » Senast online  
  Endast för inloggade  
  Antal inloggade: 1  
     

Copyright © 2007 www.ASPsidan.se
ingen sponsrar längre ASPsidan med Dedikerad Server
ASPsidan RSS
   
 XHTML / CSS
Det tog 2,1875 sekunder att ladda sidan