Laden...

Forenbeiträge von b0b0nr1 Ingesamt 92 Beiträge

14.01.2022 - 16:32 Uhr

Hi zusammen!

Dieses Problem verdirbt mir echt die ganze Woche.
Ich habe eine Docker Umgebung via Docker-Compose indem ein Container nach außen kommuniziert und den Port 6652 exposed. Darin läuft eine .net Core 3.1 Anwendung mit aktivierten Websockets und SignalR.

Rufe ich https://localhost:6652/ auf und gehe auf die Seite auf der SignalR verwendet wird (Eine Kommentar funktion die die neuen Kommentare in Echtzeit laden soll), funktioniert alles reibungslos.

Daher hab ich vermutet, das Problem muss am ReverseProxy mit ARR3 liegen und habe kurzerhand eine Subdomain in der Hosts Datei eingetragen um das lokal testen zu können.

Gehe ich nun auf die gleiche Seite aber über den Reverse Proxy (IIS10) landet der Handsake im Timeout:


[2022-01-13T18:29:07.232Z] Information: Normalizing '/sockR/hub' to 'https://devlocal.example.com/sockR/hub'.
Utils.js:151 [2022-01-13T18:29:07.233Z] Debug: Starting HubConnection.
Utils.js:151 [2022-01-13T18:29:07.233Z] Debug: Starting connection with transfer format 'Text'.
Utils.js:147 [2022-01-13T18:29:07.342Z] Information: WebSocket connected to wss://devlocal.example.com/sockR/hub.
Utils.js:151 [2022-01-13T18:29:07.342Z] Debug: The HttpConnection connected successfully.
Utils.js:151 [2022-01-13T18:29:07.342Z] Debug: Sending handshake request.
Utils.js:147 [2022-01-13T18:29:07.342Z] Information: Using HubProtocol 'json'.
... 3 Minuten später (solange geht der Timeout)
ERROR Error: Uncaught (in promise): Error: Server timeout elapsed without receiving a message from the server. Error: Server timeout elapsed without receiving a message from the server.

Natürlich habe ich vorher gegooglet und gesehen, dass man zum einen im ARR das Responerbuffering auf 1 setzen soll die Einstellungen hab ich auch so übernommen (Siehe Anhang)

Dann natürlich auch sollte eine WS/WSS Rewrite Rule vorhanden sein. Auch dies habe ich übernommen:


<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <urlCompression doStaticCompression="false" doDynamicCompression="false" />
        <rewrite>
            <rules>
                <rule name="WS reverse proxy" stopProcessing="true">
                    <match url="ws://devlocal.example.com" />
                    <conditions>
                        <add input="{CACHE_URL}" pattern="^(.+)://" />
                    </conditions>
                    <action type="Rewrite" url="{C:1}://127.0.0.1:6652" />
                </rule>
                <rule name="WSS reverse proxy" stopProcessing="true">
                    <match url="wss://devlocal.example.com" />
                    <conditions>
                        <add input="{CACHE_URL}" pattern="^(.+)://" />
                    </conditions>
                    <action type="Rewrite" url="{C:1}://127.0.0.1:6652" />
                </rule>

                <rule name="_Inbound_devlocal.example.com.com" stopProcessing="true">
                    <match url="(.*)" />
                    <action type="Rewrite" url="{C:1}://localhost:6652/{R:1}" logRewrittenUrl="true" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{CACHE_URL}" pattern="^(.+)://" />
                        <add input="{HTTP_HOST}" pattern="^devlocal\.example.com\.com$" />
                    </conditions>
                </rule>

            </rules>
            <outboundRules>
                <rule name="_Outboundund_devlocal.example.com.com" stopProcessing="true">
                    <match filterByTags="A, Form, Img, Link, Script" pattern="^http(s)?://localhost:6652/(.*)" />
                    <action type="Rewrite" value="http{R:1}://devlocal.example.com.com/{R:2}" />
                </rule>
            </outboundRules>
        </rewrite>
    </system.webServer>
</configuration>


Und jetzt weiß ich gerade auch nicht weiter.
SignalR is bei mir wie folgt konfiguriert:


 services.AddSignalR(hubOptions =>
            {
                hubOptions.ClientTimeoutInterval = TimeSpan.FromSeconds(240);
                hubOptions.HandshakeTimeout = TimeSpan.FromSeconds(120);
                hubOptions.KeepAliveInterval = TimeSpan.FromSeconds(60);
                hubOptions.EnableDetailedErrors =  true;
                hubOptions.MaximumReceiveMessageSize = 200;
                hubOptions.StreamBufferCapacity = 300;
            });

Der Hub ist wie folgt gemapped:


app.UseEndpoints(api =>
            { 
                api.MapControllers();
                api.MapHub<CommentsHub>("/sockR/hub"); 
            }
);


Das Failed Request Trace Log ist leer, also scheint der Handshake garnicht erst durchzukommen.
Cors erlaubt alle origins fürs Erste.
EDIT:
Websockets Feature ist installiert.
Verwende IIS10 + Docker + ARR3 auf Windows 11.

Hat jemand da eine Idee?

VG

b0b0

04.05.2016 - 13:27 Uhr

verwendetes Datenbanksystem: MMSQL 2014

Hallo!

Ich hoffe das ist richtige Forum.

Ich verwende Fluent NHibernate.

Meine Users Entity hat beinhaltet eine TwitchProfile Entity.
Wenn ich die Entity wie folgt hinzufüge (nach erfolgter Authentification) wird die Entity wie gewollt im Profil geladen.


TwitchProfile TwitchAccount = new DB.Domain.Entities.TwitchProfile()
                    {
                        User = this.UserSession.User,
                        ChannelName = twitchChannel.name,
                        ChannelUrl = new Uri(twitchChannel.url),
                        ChatUrl = new Uri("http://www.twitch.tv/"+ twitchChannel.name +"/chat"),
                        OAuthToken = authorizeResponse.access_token,
                        ProfileUrl = new Uri("https://www.twitch.tv/"+twitchUser.name+"/profile"),
                        Scopes = String.Join(" ", authorizeResponse.scope),
                        StreamName = twitchChannel.status,
                        StreamUrl = new Uri("http://player.twitch.tv/?channel="+ twitchChannel.name),
                        TwitchID = twitchUser._id,
                        TwitchName = twitchUser.name,
                        IsLive = isOnline,
                        PreviewImage = _previewImage,
                        Game = g,
                        EmbedMode = DB.Domain.Enums.TwitchProfileSettings.TwitchProfileEmbedModeEnum.embed,
                        ShowChat = true 



                    };
                    var u = this._service.GetById(this.UserSession.User.Id);
                    if(u.TwitchAccount == null)
                        this._twitchService.Create(TwitchAccount);

Nun hat der User die Möglichkeit seinen Twichaccount natürlich auch wieder vom Profil zu entfernen. Löschen tue ich diesen wie folgt:


var u = this.UserSession.User;

        if (u.TwitchAccount != null)
        {
            var p = u.TwitchAccount;

            this._twitchService.Delete(p.Id);





        }

        return null;

Klappt alles wie gewollt. Profil entfernt. Jedoch führe ich es erneut aus und Füge es wie oben hinzu, wird der Datensatz zwar in die Tabelle TwitchProfile geschrieben mit richtigen Foreign Key, aber die Users Entity in Nhibernate sagt trotzdem Users.TwitchAccount == null.

Komischerweise klappt es in den Unit Tests. Ich benutzt MVC5 und mit einer UnitOfWork die beim start einer Action die Transaction beginnt und beim Ende diese Commitet und die Session schließt.

Der einzige Unterschied zwischen dem UnitTest und dem Controller Aufruf ist, dass im UnitTest die Session nicht geschlossen wird sondern die Transaction zwischen den einzelnen Schritten Comitted wird.

Auch wenn ich die Tabelle händisch leere wird die Entity nicht geladen wenn ich sie hinzufüge.

Lösche ich die Tabelle jedoch wird die Entity nach Hinzufügen wieder angezeigt und nach dem Löschen des Eintrags erfolgt wieder das gleiche Resultat.

Meine Mappings sind wie folgt:

Users


public class UsersOverrides : IAutoMappingOverride<Users>
{
    public void Override(AutoMapping<Users> mapping)
    {

        mapping.References(m => m.Role).ForeignKey("Role_Id").Cascade.None();
        mapping.HasMany(m => m.ProfileData).KeyColumn("User_Id").Cascade.All();

        mapping.HasOne(x => x.Avatar).Cascade.All();

        mapping.HasOne(x => x.TeamAccount).Cascade.All();


        mapping.HasMany(x => x.Sessions).Cascade.All();


        mapping.HasMany(x => x.Conversations).Cascade.All();

        mapping.HasMany(x => x.Relations).Cascade.All();

        mapping.HasMany(x => x.Ignores).Cascade.All();

        mapping.HasMany(x => x.Threads).Cascade.None();
        mapping.HasMany(x => x.Posts).Cascade.None();

        mapping.HasMany(x => x.GameProfiles).Cascade.All();

        mapping.HasOne(x => x.Steamprofile).Cascade.All();

        mapping.HasOne(x => x.TwitchAccount).Cascade.Delete();
    }
}

TwitchProfile


public class TwitchProfileOverrides : IAutoMappingOverride<TwitchProfile>{
    public void Override(AutoMapping<TwitchProfile> mapping)
    {

        mapping.References(x => x.Game).Cascade.None(); 
        mapping.References(x => x.User).Cascade.Persist();
    }
}

Ich kämpfe mit dem Problem jetzt seit Wochen und komme dabei auf keinem grünen Zweig.

Ich hoffe mir kann da wer helfen 😃

Best,

b0b0

16.02.2015 - 02:27 Uhr

Hi,

Es handelt sich um Webforms. Aber habe jetzt noch mehrere Sachen gefunden, und übertrage den Code einfach in ein frisches Projekt

danke trotzdem.

14.02.2015 - 23:04 Uhr

hat leider nix gebracht. Er sucht weiterhin die Sachen in "ASP.content_create"

Die klasse gibt es nicht mal bei mir und ich finde auch nirgens einen Verweis darauf.

hier meine web.config :


<?xml version="1.0"?>
<!-- 
    Hinweis: Alternativ zur manuellen Bearbeitung dieser Datei 
    können Sie auch mit dem Webverwaltungstool die Einstellungen 
    für Ihre Anwendung konfigurieren. Verwenden Sie die Option 
    "Website->ASP.NET-Konfiguration" in Visual Studio. Eine 
    vollständige Liste aller Einstellungen und Kommentare befindet 
    sich in "machine.config.comments", im Allgemeinen unter "\Windows\Microsoft.Net\Framework\v2.x\Config". 
-->
<configuration>
  <appSettings>
    <add key="todayexportet15" value="0"/>
    <add key="todayexportet23" value="0"/>
    <add key="lastexport" value="00.00.0000"/>
    <!--the resolution break-points to use (screen widths, in pixels)-->
    <add key="AdaptiveImages.ResolutionBreakpoints" value="1382, 992, 768, 480"/>
    <!--where to store the generated re-sized images. This folder must be writable-->
    <add key="AdaptiveImages.CachePath" value="ai-cache"/>
    <!--the quality of any generated JPGs on a scale of 0 to 100-->
    <add key="AdaptiveImages.JpegQuality" value="80"/>
    <!--check that the responsive image isn't stale (ensures updated source images are re-cached)-->
    <add key="AdaptiveImages.WatchCache" value="true"/>
    <!--How long the BROWSER cache should last in seconds. (604800 - 7 days by default)-->
    <add key="AdaptiveImages.BrowserCache" value="604800"/>
    <!-- If there's no cookie false sends the largest var resolutions version (TRUE sends smallest)-->
    <add key="AdaptiveImages.MobileFirst" value="true"/>
    <!--the name of the cookie containing the resolution value-->
    <add key="AdaptiveImages.CookieName" value="resolution"/>
    <add key="SteamApiKey" value="..."/>
    <add key="FBAppID" value="..."/>
    <add key="RouteDebugger:Enabled" value="false"/>
  </appSettings>
  <connectionStrings>
    <add connectionString="..." providerName="System.Data.SqlClient" name="con"/>
  </connectionStrings>
  <system.net>
    <connectionManagement>
      <add address="*" maxconnection="1000"/>
    </connectionManagement>
  </system.net>
  <!--
    Eine Beschreibung der Änderungen von 'web.config' finden Sie unter 'http://go.microsoft.com/fwlink/?LinkId=235367'.

    Die folgenden Attribute können für das <httpRuntime>-Tag festgelegt werden.
      <system.Web>
        <httpRuntime targetFramework="4.5" />
      </system.Web>
  -->
  <system.web>
   
    <httpRuntime executionTimeout="11800" maxRequestLength="1048576" useFullyQualifiedRedirectUrl="false" requestValidationMode="2.0"/>
    <!--
    <customErrors defaultRedirect="InternalError.htm"
                    mode="RemoteOnly">
      <error statusCode="500"
             redirect="InternalError.htm"/>
      <error statusCode="404"
                   redirect="error.aspx?error=404"/>
      
    </customErrors>
-->
    <!-- 
            Legen Sie beim Kompilieren debug="true" fest, um 
            Debugsymbole in die kompilierte Seite einzufügen. 
            Da dies die Leistung beeinträchtigt, sollte der 
            Wert nur beim Entwickeln auf "True" gesetzt werden.
        -->
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
        <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      </assemblies>
    </compilation>
    <!--
            Der Abschnitt <authentication> ermöglicht die Konfiguration 
            des Sicherheitsauthentifizierungsmodus, mit dem 
            ASP.NET eingehende Benutzer identifiziert.   
        -->
    <authentication mode="Windows"/>
    <!--
            Der Abschnitt <customErrors> ermöglicht die Konfiguration 
            der Vorgehensweise bei unbehandelten Fehlern während 
            der Anforderungsausführung. Insbesondere können 
            Entwickler HTML-Fehlerseiten konfigurieren, die anstelle 
            einer Fehlerstapelüberwachung angezeigt werden.

        
    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
      <error statusCode="403" redirect="error.aspx?error=405" />
      <error statusCode="404" redirect="error.aspx?error=404" />
    </customErrors>
  -->
    <!--
    

-->
    <customErrors mode="Off" defaultRedirect="error.aspx?error=500">
      <error statusCode="404" redirect="error.aspx?error=404"/>
      <error statusCode="403" redirect="error.aspx?error=403"/>
    </customErrors>
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
      <controls>
        <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit"/>
      </controls>
      <namespaces>
        <add namespace="NetworkFreaks_DE"/>
        <add namespace="NetworkFreaks_DE.ACP"/>
        <add namespace="NetworkFreaks_DE.Controls"/>
        <add namespace="NetworkFreaks_DE.Controls.admin"/>
      </namespaces>
    </pages>
  </system.web>
  <!-- 
        Der system.webServer-Abschnitt ist zum Ausführen von ASP.NET AJAX unter
        Internetinformationsdienste 7.0 erforderlich. Für frühere Versionen von
        IIS ist er nicht erforderlich.
    -->
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </modules>
    <handlers>
      <remove name="WebServiceHandlerFactory-Integrated"/>
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
      <add name="AdaptiveImageHandlerGif" path="*.gif" verb="GET" type="AdaptiveImages.AdaptiveImageHandler"/>
      <add name="AdaptiveImageHandlerJpg" path="*.jpg" verb="GET" type="AdaptiveImages.AdaptiveImageHandler"/>
      <add name="AdaptiveImageHandlerPng" path="*.png" verb="GET" type="AdaptiveImages.AdaptiveImageHandler"/>
    </handlers>
  </system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="HtmlAgilityPack" publicKeyToken="bd319b19eaf3b43a" culture="neutral"/>
        <bindingRedirect oldVersion="0.0.0.0-1.4.9.0" newVersion="1.4.9.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

*EDIT*

Komischer Weise funktioniert es aber in Seiten ohne Master Page doch in solchen Fällen hier nicht:


<asp:Content ID="Content1" ContentPlaceHolderID="Content" runat="server">
   <%=this.Test %>
</asp:Content>

14.02.2015 - 20:21 Uhr

Hi,

Ich hab schon google probiert und kam auch durch stackoverflow auf keine Lösung für mein Problem.

Ich hab ein Webforms Projekt. Mit einem Unterordner "ACP" fürs Backend. Dort liegt die ASPX Seite "Content.Create.aspx" mit Codebehind Datei.

Meine Erstellten Controlls liegen fürs Backend in "~/Controls/admin/"

Weder die String-Variable "EntryType", welche in der Codebehinddatei liegt, noch meine Controls werden erkannt. Somit zeigt mit die IDE alles als nicht definiert an.

Komisch ist auch dass die Fehlermeldung wie folgt ist siehe Angang, auf einen ganz anderen Namespace zeigt, denn der der Codebhind datei ist "NetworkFreaks.ACP"

Kann die Projektdatei beim einchecken / auschecken von PC zu Notbook via GIT kaputt gegangen sein? Denn auf dem NB hab ich das Problem auch. Ebenfalls 2013er Express Version.

BTW: Deploy, Builden und ausführen geht reibungslos, somit denke ich dass es ein Problem in VS sein muss.

Weiß wern Rat?

VG

b0b0

06.05.2014 - 18:05 Uhr

Hallo allerseits,

Ich möchte hier einmal kurz und bündig mein Open Source Projekt vorstellen (Github: https://github.com/nfMalde/Ren.CMS.NET) und suche gleichzeitig Helfer/Mitentwickler.

Vorher MVC2/3 habe ich nach rund 2 Jahren Entwicklung das Projekt ständig erweitert und auf MVC4 kovertiert (zu ca 90%, mehr zurzeit leider durch meine Arbeit und andere Sachen die dazwischen kamen nicht möglich da dies viele Änderungen in den Klassen mit sich führen würde.)

Zugegeben es ist erst seit ca einem halben Jahr Open Source, da ich es vorher nur für mich privat genutzt habe, um mir diverse Sachen anzueignen, die ich für die Ausbildung brauchte. Kurz nach der Ausbildung habe ich mich dennoch dazu entschlossen es zu veröffentlichen und es auf Github verfügbar gemacht.

Wie gesagt, da es vorher nur ein Lernprojekt war, sieht man an manchen Stellen noch "Spaghetti Code", ich arbeite jedoch daran das zu "Entwirren".

Das CMS trägt den Namen "Ren.CMS.NET" und unterstützt bereits folgende Features:

  • Videokonvertierung
  • Thumbnailgenerierung
  • Rechteverwaltung (Bisher nur auf Datenbank Ebene)
  • Usersettings
  • Benutzerverwaltung
  • Inhaltsverwaltung
  • Kategorieverwaltung.
  • Filemanagement mit Wasserzeichen oder Ohne je nach Einstellung
  • Lokalisierung
  • VideoJS implementierung
  • Galerie

Es ist Modular aufgebaut, da ich wollte, dass sich jeder Nutzer seine Module selbst bauen kann, und wie man es bei anderen Erweiterungen kennt auch dessen Lizenz dann selbst bestimmen darf. Im Repository werden jedoch keinerlei Module landen die nicht von mir oder den vllt Mitentwicklern stammen und dessen Source Code einsehbar ist (Sprich nur es kommen nur Module die fest zum Kern des CMS gehören).

Später soll jedes Modul übers Backend installierbar sein. Und dem Admin der es installiert VOR der Installation Auskunft darüber geben welche Assemblys und Namespaces es verwendet und worauf das Modul zugreift.

Sowie eine Möglichkeit einzelne Module ganz zu deaktivieren (auch deren komplette Ausführung), jedoch steht das weit hinten in den TODOs.

Auf dem TODO stehen jede Menge Features / Fixes / Improvements, und wer in die Issues bei Github schaut, sieht schnell ich den Bereich dort dafür verwendet keine Idee verloren gehen zu lassen.

Es ist bereits ein Deployserver vorhanden der den aktuellen Stand auf die Demoseite spielt, jedoch da dieser selbst geschrieben ist gab es ein zwei Probleme, daher ist die Seite noch nicht aufrufbar.

Sollte es noch fragen geben werde ich die gerne beantworten 😃

MFG

Malte

21.10.2013 - 19:15 Uhr

Hi!

Ich hab den Fehler gefunden 😃

Ich weiß zwar immer noch nicht warum das dadurch so gekommen ist aber hier:



return Json(new
            {
                success = false,
                message = LanguageDefaultsMessages.LANG_SHARED_MESSAGE_FORM_NOT_VALID

//             modelStateKeys = ModelState.ToDictionary(e => e.Key),
  //              modelStateValues = ModelState.ToDictionary(e => e.Value)
            });


Die auskommentierten zwei Zeilen warn der Auslöser.

21.10.2013 - 14:38 Uhr

@Abt.

Dis nContentPostModel beinghaltet ein IENumerable von typ nContentPostModelTexts.

@Mr. Sparkle:

Die ReturnlangLine methode gibt aus der Datenbank zur aktuellen Sprache eine "Lang Line" aus:



    public class LanguageDefaultValues : IEnumerable
    {
        #region Fields

        public string LangCode = "__USER__";
        public string Package = "Root";

        private Type baseType = null;
        private LanguageCode[] codes = null;
        private string Langlinename = "";
        private Dictionary<string, string> myCol = new Dictionary<string, string>();
        private LanguagePackage[] packages = null;
        private PropertyInfo[] props = null;
        private object[] sobjData = null;

        #endregion Fields

        #region Constructors

        public LanguageDefaultValues(string languageLinename, string Packagename = "Root", string LangCode = "__USER__")
        {
            this.Package = Packagename;
            this.LangCode = LangCode;
            this.Langlinename = languageLinename;
        }

        #endregion Constructors

        #region Methods

        public void Add(string langCode, string Value)
        {
            myCol.Add(langCode, Value);
        }

        public IEnumerator<KeyValuePair<string, string>> GetEnumerator()
        {
            return myCol.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }

        public string ReturnLangLine()
        {
            Dictionary<string, string> DefaultVal = myCol;
            string LangLine = this.Langlinename;

            string package = this.Package;
            string code = this.LangCode;

            CORE.Language.Language Lang = new CORE.Language.Language(code, package);

                string langName = this.Langlinename;

                return Lang.getLine(langName, DefaultVal);

            return "";
        }

        public Dictionary<string, string> ToDictionary()
        {
            return this.myCol;
        }

        private string _getLangName(Expression<Func<string, string>> f)
        {
            string name =  ((f.Body as MemberExpression).Member.Name);
               return name;
        }

        #endregion Methods
    }


Referenz zur Language Klasse:



   public class Language
    {
        #region Fields

        ThisApplication.ThisApplication AppT = new ThisApplication.ThisApplication();
        private string lineName = "";
        private string lngcode = null;
        private string pPackage = "Root";
        private MembershipUser User = new MemberShip.nProvider.CurrentUser().nUser;

        #endregion Fields

        #region Constructors

        /// <summary>
        /// Init the Language  Class with a given Lang-Code
        /// </summary>
        /// <param name="langcode">Lang-Code for this Instance</param>
        /// <param name="package">The Package for the Language Instance (Default: Root)</param>
        public Language(string langcode, string package = "Root")
        {
            if (langcode == "__USER__")
            {
                langcode = Helper.CurrentLanguageHelper.CurrentLanguage;
            }

            this.lngcode = langcode;
            this.pPackage = package;
        }

        /// <summary>
        /// Init the Language Class and sets the Lang-Code to "deDE"
        /// </summary>
        /// <param name="package">The Package for the Language Instance (Default: Root)</param>
        public Language()
        {
        }

        /// <summary>
        /// Instant init. This Init activates the  "GetInstant()" Function and returns directly an language line.
        /// Example: Name = new Language("name","Root","deDE").GetInstant();
        /// </summary>
        /// <param name="LangLineName">Name of the language line</param>
        /// <param name="PackageName">Name of the Package</param>
        /// <param name="code">Language code (default: deDE)</param>
        public Language(string LangLineName, string PackageName, string code = "deDe")
        {
            this.lineName = LangLineName;
            this.pPackage = PackageName;
            this.lngcode = code;
        }

        #endregion Constructors

        #region Properties

        /// <summary>
        /// Sets the Package for this instance. Default: Root
        /// </summary>
        public string Package
        {
            get { return this.pPackage; }
            set { this.pPackage = value; }
        }

        #endregion Properties

        #region Methods

        public string GetInstant()
        {
            return this.getLine(lineName);
        }

        /// <summary>
        /// Loads a Language Line String from the Package (Set by this.Package / Default: Root)
        /// </summary>
        /// <param name="name">Name of the Language Line</param>
        /// <returns>(String)Content</returns>
        public string getLine(string name, Dictionary<string, string> DefaultReturnValue = null)
        {
            SqlHelper Sql = new SqlHelper();
            string cmd = "SELECT TOP 1 * FROM " + AppT.getSqlPrefix + "Language WHERE Package=@Package AND Name=@Name AND Code=@Code";
            SqlParameter[] P = new SqlParameter[] {

            new SqlParameter("@Package",this.pPackage),
            new SqlParameter("@Name",name),
            new SqlParameter("@Code",this.lngcode)

            };
            string line = "";
            try
            {

                Sql.SysConnect();
                SqlDataReader Reader = Sql.SysReader(cmd, P);
                Reader.Read();
                if (Reader.HasRows)
                {
                    line = ((string)Reader["Content"]);

                }
                Sql.SysDisconnect();
            }
            catch (SqlException e) { line = e.Message; }
            finally { }

            if (!LanglineExists(name, Package, this.lngcode) && DefaultReturnValue != null)
            {

                line = this.registerDefaultValues(name, this.pPackage, DefaultReturnValue);

            }
            if (String.IsNullOrEmpty(line)) line = name;

            return line;
        }

        /// <summary>
        /// Inserts an Language Line.
        /// </summary>
        /// <param name="name">Name of the Line</param>
        /// <param name="Content">Content of the Line</param>
        public void InsertLine(string name, string Content, bool overwriteDB = false)
        {
            //Checking for langline

            SqlHelper Sql = new SqlHelper();
            Sql.SysConnect();

            if (this.LanglineExists(name, Package, this.lngcode) && !overwriteDB)
                throw new Exception("Language Line " + name + "(" + this.lngcode + ") does allready exists in Package: " + Package);

            string cmd = "INSERT INTO " + AppT.getSqlPrefix + "Language (Name, Content, Package, Code) VALUES (@Name,@Content,@Package,@Code)";
            SqlParameter[] Parameters = new SqlParameter[]{
            new SqlParameter("@Name", name),
            new SqlParameter("@Content", Content),
            new SqlParameter("@Package", this.pPackage),
            new SqlParameter("@Code", this.lngcode),

            };
            try
            {

                Sql.SysNonQuery(cmd, Parameters);
                Sql.SysDisconnect();

            }
            catch (SqlException e)
            {

                throw e;

            }
            finally
            {

            }
        }

        public bool LanglineExists(string LangName, string LangPackage, string LangCode)
        {
            if (LangCode == "__USER__" && HttpContext.Current.Request.IsAuthenticated)
            {
                if (User == null) User = new MemberShip.nProvider.CurrentUser().nUser;
                Settings.UserSettings Us = new Settings.UserSettings(User);

                object lc = Us.getSetting("langCode").Value;
                if (lc != null) LangCode = lc.ToString();
                else LangCode = "";
            }
            if (String.IsNullOrEmpty(LangCode))
            {

                SettingsHelper.GlobalSettingsHelper GS = new SettingsHelper.GlobalSettingsHelper();

                LangCode = GS.Read("GLOBAL_DEFAULT_LANGUAGE");

            }

            string check = "SELECT * FROM " + AppT.getSqlPrefix + "Language WHERE Name=@name AND Package=@package AND Code=@code";

            SqlHelper Sql = new SqlHelper();
            Sql.SysConnect();
            bool exists = false;
            SqlDataReader R = Sql.SysReader(check, new nSqlParameterCollection(){ {"@name", LangName },
                                                                                  {"@package", LangPackage},
                                                                                  {"@code", LangCode}});
            exists = R.HasRows;

            R.Close();
            Sql.SysDisconnect();
            return exists;
        }

        private string registerDefaultValues(string forLangLine, string forPackage, Dictionary<string, string> DefaultReturnValue)
        {
            string returnValue = null;

            //Database Action

            CORE.SqlHelper.SqlHelper SQL = new CORE.SqlHelper.SqlHelper();

            CORE.ThisApplication.ThisApplication TA = new CORE.ThisApplication.ThisApplication();

            string prefix = TA.getSqlPrefix;

            string query = "SELECT code FROM " + prefix + "Lang_Codes";
            CORE.SqlHelper.nSqlParameterCollection SQLCOL = new CORE.SqlHelper.nSqlParameterCollection();

            SQL.SysConnect();

            SqlDataReader Codes = SQL.SysReader(query, SQLCOL);
            Language Lang = null;
            if (Codes.HasRows)
            {

                while (Codes.Read())
                {

                    Lang = new Language((string)Codes["code"], forPackage);

                    if (DefaultReturnValue[(string)Codes["code"]] == null)
                    {

                        DefaultReturnValue.Add((string)Codes["code"], DefaultReturnValue.Where(code => code.Value != null).First().Value);

                    }
                    Lang.InsertLine(forLangLine, DefaultReturnValue[(string)Codes["code"]]);

                }

            }
            Codes.Close();

            Lang = new CORE.Language.Language(this.lngcode, forPackage);
            returnValue = Lang.getLine(forLangLine);
            if (returnValue == "")
            {
                returnValue = forLangLine;

            }
            SQL.SysDisconnect();

            return returnValue;
        }

        #endregion Methods
    }
}


EDIT: http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder Gerade gelesen. Bin gerade nicht Zuhause aber ich werde es damit zuhause einmal probieren (Custom Model Binder) Für alternative Ideen bin ich jedoch trotzdem sehr dankbar 😃

21.10.2013 - 11:02 Uhr

Darauf bin ich auch schon gestoßen,

Jedoch gehen alle anderen Forms, an die ich Models übergebe.

Ich hatte gehofft die Logik beibehalten zu können und das Problem anders zu lösen.

20.10.2013 - 23:15 Uhr

Hallo!

Ich bekomme merkwürdiger Weise einen Fehler in meinem OpenSource CMS.
Undzwar möchte ich einen AjaxRequest machen und per JSON dann ganz normal success=true oder false und eine message zurückgeben.

Vorher habe ich immer in Plaintext "Inhalt erfolgreich erstellt" ausgegeben und es war ein normales ActionResult.

Merkwürdigweise ist das das einzige Form, welches mir diesen Fehler zurückgibt. Und dies auch nicht mal im debugger selber. Sondern es scheint direkt vom DevServer zu kommen.

Breakpoints sagen mir dass die Action korrekt durchgelaufen wird.

Ich dachte eventuell liegt es an meinem PC...daher habe ich das Repository auf meinem Notebook erneut gecloned und ach da der gleiche Fehler:

Fehlermeldung:
Beim Serialisieren eines Objekts vom Typ "System.Globalization.CultureInfo" wurde ein Zirkelverweis erkannt.

Hier ist der Code der Action:


    [HttpPost]
        [nPermissionVal(NeededPermissionKeys="USR_CAN_CREATE_CONTENT")]
        public JsonResult AddContent(Models.Core.nContentPostModel MDL, nContentTextBinder Binder)
        {
            MDL.Texts = Binder.Bind();

            Ren.CMS.Content.ContentValidator Cval = new Content.ContentValidator();

            if (!Cval.isValidPostModelForInsert(MDL))

                return Json(new
                {
                    success = false,
                    message = LanguageDefaultsMessages.LANG_SHARED_MESSAGE_FORM_NOT_VALID,
                    modelStateKeys = ModelState.ToDictionary(e => e.Key),
                    modelStateValues = ModelState.ToDictionary(e => e.Value)
                });

            MDL.Texts.ToList().ForEach(e => e.LongText = HttpUtility.UrlDecode(e.LongText));
            var Props = MDL.GetType().GetProperties().Where(e => e.PropertyType == typeof(string));
            foreach (var prop in Props)
                prop.SetValue(MDL, HttpUtility.UrlDecode((prop.GetValue(MDL) ?? String.Empty).ToString()));

            Ren.CMS.Content.ContentManagement CtM = new Content.ContentManagement();
            Ren.CMS.Content.nContent ContentModel = new Content.nContent(MDL);
            CtM.InsertContent(ContentModel);
            if (MDL.Tags != null)
                CtM.bindTagsToContent(MDL.ID, MDL.Tags);

            return Json(new { success = true, message = LanguageDefaultsMessages.LANG_SHARED_MESSAGE_FORM_CONTENT_SAVED.ReturnLangLine() });
        }


nContentPostModel:



 public class nContentPostModel
    {
        #region Properties

        /// <summary>
        /// Returns the Category object
        /// </summary>
        /// 
        [Required]
        public string CategoryID
        {
            get;
            set;
        }

        /// <summary>
        /// Returns the Content Type of the Content
        /// </summary>
        /// 
        [Required]
        public string ContentType
        {
            get;
            set;
        }

        public DateTime CreationDate
        {
            get;
            set;
        }

        /// <summary>
        /// Returns the Username of the Creator
        /// </summary>
        public string CreatorName
        {
            get;
            set;
        }

        /// <summary>
        /// Returns the Creators PK ID
        /// </summary>
        ///
        [Required]
        public string CreatorPKID
        {
            get;
            set;
        }

        public string CreatorSpecialName
        {
            get; set;
        }

        //Eigenschaften
        /// <summary>
        /// Returns the ID of the Content
        /// </summary>
        /// 
        public int ID
        {
            get;
            set;
        }

        /// <summary>
        /// Returns Boolean of the Locked Status of the Content
        /// </summary>
        ///  
        public bool Locked
        {
            get;
            set;
        }

        public int ReferenceID
        {
            get;
            set;
        }

        public int[] Tags
        {
            get; set;
        }

        public IEnumerable<nContentPostModelText> Texts
        {
            get; set;
        }

        #endregion Properties
    }


nContentTextBinder:



 public class nContentTextBinder
    {
        #region Properties

        public List<bool> Active
        {
            get; set;
        }

        public List<string> LangCode
        {
            get; set;
        }

        public List<string> LongText
        {
            get; set;
        }

        public List<string> MetaDescription
        {
            get; set;
        }

        public List<string> MetaKeyWords
        {
            get; set;
        }

        public List<string> PreviewText
        {
            get; set;
        }

        public List<string> SEOName
        {
            get; set;
        }

        public List<int> TextID
        {
            get; set;
        }

        public List<string> Title
        {
            get; set;
        }

        #endregion Properties

        #region Methods

        public List<nContentPostModelText> Bind()
        {
            List<nContentPostModelText> B = new List<nContentPostModelText>();
            if (IsN()) return B;
            for (int x = 0; x < Active.Count; x++)
            {
                nContentPostModelText Bb = new nContentPostModelText();
                Bb.Active = Active[x];

                if (Title.Count > x)
                {
                    Bb.Title = Title[x];

                }
                if (PreviewText.Count > x)
                {
                    Bb.PreviewText = PreviewText[x];

                }
                if (LongText.Count > x)
                {
                    Bb.LongText = LongText[x];

                }
                if (SEOName.Count > x)
                {
                    Bb.SEOName = SEOName[x];

                }
                if (MetaDescription.Count > x)
                {
                    Bb.MetaDescription = MetaDescription[x];

                }
                if (MetaKeyWords.Count > x)
                {
                    Bb.MetaKeyWords = MetaKeyWords[x];

                }
                if (TextID.Count > x)
                {
                    Bb.TextID = TextID[x];

                }
                if (LangCode.Count > x)
                {
                    Bb.LangCode = LangCode[x];

                }

                B.Add(Bb);

            }

            return B;
        }

        private bool IsN()
        {
            if (Title == null) return true;
            if (PreviewText == null) return true;
            if (LongText == null) return true;
            if (SEOName == null) return true;
            if (MetaDescription == null) return true;
            if (MetaKeyWords == null) return true;
            if (TextID == null) return true;
            if (Active == null) return true;
            if (LangCode == null) return true;

            return false;
        }

        #endregion Methods
    }


Die View würde den Thread sprengen daher hier nur der Link zur Datei im Repository:
<Link entfernt>

Ich bin echt ratlos. Wär echt nett wenn jemand eine Idee hätte wo der Fehler herkommen könnte.

Ich habe schon alle Dateien durchsucht, ob ich irgendwo was mit der CultureInfo mache aber auch da leider Fehlanzeige.

mfg

b0b0

20.05.2013 - 02:23 Uhr

verwendetes Datenbanksystem: MSSQL2008

Hi,

ich habe seit kurzen auf NHIBERNATE umgestellt. Habe jedoch bei einer Tabelle besondere Probleme in dem nichts zurück kommt.

Hiereinmal das Mapping der besagten Tabelle:


  public class ContentAttachmentMap : ClassMapping<ContentAttachment> {
        
        public ContentAttachmentMap() {
			Table(CMS.CORE.Config.DB.Prefix.Replace("dbo.", "") +"Content_Attachment");
			Schema("dbo");
			Lazy(true);
			//Property(x => x.Pkid, map => map.NotNullable(true));
            Id<Guid>(x => x.Pkid, map => map.Generator(Generators.Guid));
			Property(x => x.Nid, map => map.NotNullable(true));
			Property(x => x.AttachmentType, map => { map.Column("attachment_type"); map.NotNullable(true); });
			Property(x => x.ContentType, map => { map.Column("content_type"); map.NotNullable(true); });
			Property(x => x.FPath);
			Property(x => x.FName);
			Property(x => x.ThumpNail);
			Property(x => x.AttachmentArgument);
			Property(x => x.ATitle);
        }
    }

Die Entity class:


    public class ContentAttachment {
        public virtual System.Guid Pkid { get; set; }
        public virtual int Nid { get; set; }
        public virtual string AttachmentType { get; set; }
        public virtual string ContentType { get; set; }
        public virtual string FPath { get; set; }
        public virtual string FName { get; set; }
        public virtual string ThumpNail { get; set; }
        public virtual string AttachmentArgument { get; set; }
        public virtual string ATitle { get; set; }
    }

Ich rufe um anhand der Pkid das Attachment zu kriegen folgende Funktion auf:


public ContentAttachment GetByPKid(Guid pkid)
         {
 
             using (ISession session = NHibernateHelper.OpenSession())
             {
                 return session.QueryOver<ContentAttachment>().Where(e => e.Pkid == pkid).Take(1).SingleOrDefault();
             }


         
         
         }


Ich lass aufm SQL Server den Profiler mitlaufen um besser die SQL Queires von nHiernate zu debuggen, jedoch kommt nicht mal ein SQL beim Server an, nhibernate spuckt jedoch auch keinerlei Fehler aus.

Woran könnte das liegen? Ich steht da grad etwas aufm Schlauch.

Es geht die komplette Entity nicht, also selbst wenn ich mir die ersten 100 Zeilen ausgeben lassen möchte kommt nichts zurück.

04.04.2013 - 23:10 Uhr

Habs gelöst:

Nicht direkt mit MSDEPLOY
C:\Windows\Microsoft.NET\Framework64\v4.0.30319> msbuild "C:\Program Files (x86)\VisualSVN Server\bin\myproj\myproj.csproj" /p:DeployOnBuild=true;PublishProfile=toBeta

04.04.2013 - 17:48 Uhr

Hi!

Ich benutze als Repository VisualSVN und entsprechenden Server. Den SVN Server habe ich an mein Build tool "CruiseControl.NET" bereits erfolgreich angedockt.

Ich habe in meinem MVC3 Projekt bei Veröffentlichen das Profil "toBeta", wo ebenfalls der ConnectionString meiner BetaUmgebung automatisch in die Web.config eingefügt wird.

Nun möchte ich nachdem in CruiseControl der Build erfolgreich war, das Projekt per Webdeploy auf den beta server hochschieben.

Leider funktioniert das nicht so wie ich möchte. Ich finde auch leider keinen Parameter, mit dem ich das Profil festlegen kann.

Kann mir wer helfen?

VG

b0b0

21.03.2013 - 18:14 Uhr

Ui...danke bin auf den Link gekommen wo das Tool aus der 2010 Ultimate gezeigt wurd nochmal und siehse da in VS2012 ist es unter Rechtsklick -> Klassendiagramm anzeigen. Nice... danke 😃

21.03.2013 - 17:22 Uhr

Hi!

Ich suche ein wie o.g. Addin um die Beziehungen der Einzelnen Libraries grafisch darzustellen.

Ähnlich wie ein UML Diagram. Außer die Funktion, welche in der Ultimate von VS drin sein soll kenn ich leider keine (Habe Professional).

Kennt wer ein solches Addin? Eine Schlichte grafik ohne Schnick Schnack reicht aus.

Ich kommt nämlich bei meinem Projekt langsam dazu den Überblick zu verlieren^^

vg

b0b0

17.03.2013 - 17:50 Uhr

Ah, ok... also muss ich mir die FieldInfo vorher holen richtig?

17.03.2013 - 15:53 Uhr

Hi,

ich steh vor einem Problem und hab gehofft mir kann jemand helfen, google und co ergaben leider keine Lösungen für mich.

Ich hab eine Klasse, welche später als Collection genutzt wird, abgeleitet von einem IENumerable.

Innerhalb dieser Klasse hab ich die Funktion "ReturnLangLine".

Der Sinn dahinter ist, dass ich anhand von Attributen die darauf gesetzt sind herausfinden möchte Welcher LangCode und Welches Package genutzt werden soll.

Sind auf der Datenbank diese nicht vorhanden werden Sie ahand der Collection erstellt.

Ich habe erstmal nur den PackageName als Attribut:


    [System.AttributeUsage(System.AttributeTargets.All)]
    public class LanguagePackage : System.Attribute
    { 
        private string name;
        public LanguagePackage(string Code)
        {
            

            name = Code;
            
        }
        public string Name
        {
        get{ return this.name; }
        
        }
    
    }

Außerdem möchte ich im Constructor meiner Klasse das Attribut schon auslesen:



 public class LanguageDefaultValues : IEnumerable
    {
        private Dictionary<string, string> myCol = new Dictionary<string, string>();
        private LanguagePackage[] packages = null;
        private LanguageCode[] codes = null;
        private object[] sobjData = null;
        private Type baseType = null;
        private PropertyInfo[] props = null;
        public string Package = "Root";
        public string LangCode = "__USER__";

        public LanguageDefaultValues()
        {
          
            Type t = this.GetType();

            MemberInfo MI = typeof(LanguageDefaults.LanguageDefaultValues);

            sobjData = MI.GetCustomAttributes(true);


            packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true);
            codes = (LanguageCode[])t.GetCustomAttributes(typeof(LanguageCode), true);
            if (sobjData.Length >= 1) { }
           
        }

......


Um so auf den Packagetype und den Langcode zu kommen.

In der Praxis sieht das Ganze dann so aus:



 public static class Test
    {
        
        [LanguagePackage("TESTPKG")]
        public static LanguageDefaultValues TEST_LANG_NAME= new LanguageDefaultValues(){
                                                            { "de-DE", "TEST-DEUTSCH" },
                                                            { "en-US", "TEST_ENGLISCH" }};


}



Jedoch gibt er immer aus dass packages = (LanguagePackage[])t.GetCustomAttributes(typeof(LanguagePackage), true);

leer ist.

Ich finde einfach den Fehler nicht. Kann mir wer helfen?

VG

b0b0

28.12.2012 - 21:43 Uhr

Hallo Leute,

in meinem Backend lade ich die einzelnen Controlls via AJAX (jquery widgets) und render im Controller in MVC3 damit eine View.

Dies klappt auch wunderbar ich kann wie in Windows Fenster öffnen und schließen, sie verschieben etc...

Nun kam ich zum Widget für die Inhaltserstellung. Der Haupttext soll HTML beinhalten daher brauchte ich einen WYSIWYG Editor und habe mich für TinyMCE entschieden.

Hierfür habe ich via NUGET das Package TinyMCE.MVC.Jquery installiert.

Schön und gut der TinyMCE Editor wird auch angezeigt und funktioniert schleudert aber nach Kurzer Zeit wirft er folgende Javascript Fehler aus:


Uncaught TypeError: Object [object Object] has no method 'split' backend-gui.js:880
$.droppable.drop backend-gui.js:880
e.Widget._trigger jquery-ui-1.9.2.custom.min.js:6
e.widget._drop jquery-ui-1.9.2.custom.min.js:6
(anonymous function) jquery-ui-1.9.2.custom.min.js:6
(anonymous function) jquery-ui-1.9.2.custom.min.js:6
jQuery.extend.each jquery-1.8.3.js:611
e.ui.ddmanager.drop jquery-ui-1.9.2.custom.min.js:6
e.widget._mouseStop jquery-ui-1.9.2.custom.min.js:6
(anonymous function) jquery-ui-1.9.2.custom.min.js:6
e.widget._mouseUp jquery-ui-1.9.2.custom.min.js:6
(anonymous function) jquery-ui-1.9.2.custom.min.js:6
e.widget._mouseUp jquery-ui-1.9.2.custom.min.js:6
(anonymous function) jquery-ui-1.9.2.custom.min.js:6
_mouseUpDelegate jquery-ui-1.9.2.custom.min.js:6
jQuery.event.dispatch jquery-1.8.3.js:3058
elemData.handle.eventHandle



-----------------------------------------------------------------

GET http://localhost:10118/Backend/[object%20Object] 404 (Not Found) jquery-1.8.3.js:6325
jQuery.extend.clean jquery-1.8.3.js:6325
jQuery.buildFragment jquery-1.8.3.js:6164
jQuery.fn.extend.domManip jquery-1.8.3.js:5974
jQuery.fn.extend.append jquery-1.8.3.js:5777
b.fn.(anonymous function)
widgetAction backend-widgets.js:105
(anonymous function) backend-gui.js:324
jQuery.event.dispatch jquery-1.8.3.js:3058
elemData.handle.eventHandle

------------------------------------------------------------------

Uncaught TypeError: Cannot read property 'body' of null
m.create.getBody
m.create.getContent
m.create.isDirty
e.create.storeDraft editor_plugin.js:1
(anonymous function)



Ich benutze die Standart View für den TinyMCE, welche mitinstalliert wurde:



@*
Don't forget to reference the JQuery Library here, inside your view or layout.
<script src="@Url.Content("~/Scripts/jquery-x.x.x.min.js")" type="text/javascript"></script>
\*@

<script src="@Url.Content("~/Scripts/tinymce/jquery.tinymce.js")" type="text/javascript"></script>

<script type="text/javascript">

    (function(){ 

      $(function() { 
      
          $('#@ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)').tinymce({

            // Location of TinyMCE script
            script_url: '@Url.Content("~/Scripts/tinymce/tiny_mce.js")',
            theme: "advanced",
            
            height: "300",
            width: "auto",
            verify_html : false,
            plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
            
            // Theme options
            theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
            theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
            theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
            theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft,codehighlighting,netadvimage",
            theme_advanced_toolbar_location : "top",
            theme_advanced_toolbar_align : "left",
            theme_advanced_statusbar_location : "bottom",
            theme_advanced_resizing : false,
            
            // Example content CSS (should be your site CSS)
            content_css : "@Url.Content("~/Scripts/tinymce/css/content.css")",
            convert_urls : false,
            
            // Drop lists for link/image/media/template dialogs
            template_external_list_url : "lists/template_list.js",
            external_link_list_url : "lists/link_list.js",
            external_image_list_url : "lists/image_list.js",
            media_external_list_url : "lists/media_list.js"

        });

      });

    })();

</script>

@Html.TextArea(string.Empty, /* Name suffix */
    ViewData.TemplateInfo.FormattedModelValue /* Initial value */
)


Geladen in der WidgetView wird es so:

View:


@model Models.Core.nContentPostModel
@{
    Models.Backend.Content.CategoryModel CM = new Models.Backend.Content.CategoryModel();
 
    }
<style type="text/css">

    table.tblCreateContent {
    
    width:100%;

    
    
    }

        table.tblCreateContent td:first-child {
            width:50%;
            min-height: 30px;
            padding:1px;
            margin:1px;
            vertical-align:top;
            text-align:left;
        }
             table.tblCreateContent tr {
        
        background-color:transparent;

        
        
        }
        table.tblCreateContent tr:hover {
        
        background-color:#e6dede;

        
        
        }
   table.tblCreateContent td:last-child {
            width:50%;
            padding:1px;
             min-height: 30px;
            margin:1px;
            vertical-align:top;
            text-align:right;
        }

        table.tblCreateContent td input[type] {
        
        height:20px;
        
        }
        table.tblCreateContent td input, table.tblCreateContent td select, table.tblCreateContent td textarea{
            width:800px;
        }
        table.tblCreateContent td textarea {
        
        height:150px;

        }
    a.create-content-help {
    
   cursor:help;
    text-decoration:dotted;
    
    }

</style> 


<script>


    $(function () {


        $('.create-content-help').each(function () {
            try {
                $(this).click(function () {



                    var x = $(this).closest("tr");
                    var t = (x[0].title);
                    $('#help-dialog-create-content').html(t);

                    $('#help-dialog-create-content').dialog({

                        width: 600,
                        height: 'auto',
                        resizable: false,
                        title: "Inhalte erstellen - Hilfe",
                        modal: true

                    });

                    $('#help-dialog-create-content').dialog('open');

                });
            }
 catch(e){}


        });


    });

</script>
<div id="help-dialog-create-content" style="font-size:10px !important;"></div>
 <table class="tblCreateContent">

    <tr title="Vergeben Sie hier einen Aussagekräftigen Titel. Achten Sie darauf, dass dieser für Suchmaschienen interessant wird wenn der Titel auch im Haupttext, den Suchstichworten, dem Vorschautext und der Meta-Beschreibung vorkommt.">
        <td>
            <b>Titel:</b><br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
        </td>
        <td>

            @Html.TextBoxFor(m => m.Title)

        </td>

    </tr>
        <tr title="Geben Sie hier den Vorschautext an. Dieser bietet Besuchern einen groben Vorgeschmack auf den Hauptinhalt.">
        <td>
            <b>Vorschau Text:</b><br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
        </td>
        <td>
            @Html.TextAreaFor(m=>m.PreviewText)

        </td>



    </tr>
    <tr title="Geben Sie hier den Inhalt ein. Dieser wird bei der Detailansicht angezeigt.">

        <td>
            <b>Text:</b><br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
        </td>

        <td>

            @Html.EditorFor(m => m.LongText)

        </td>
    </tr>
    <tr title="Wählen Sie hier die Kategorie für den Inhalt oder legen Sie eine an."><td>

        <b>

            Kategorie:
            
        </b><br />
        <a href="javascript: new widgetAction('widget:NEW_CATEGORY:open')">Neue Kategorie anlegen</a>
        <br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
        </td>

        <td>

         @Html.DropDownListFor(m => m.CategoryID, new SelectList(CM.CategoryList(),"id","shortName"))

        </td>


    </tr>

    <tr title="Geben Sie hier die Suchmaschienen Beschreibung ein.">
        <td>

            <b>Meta Beschreibung (Für Suchmaschienen):</b>
            <br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a>
        </td>
        <td>
            @Html.TextAreaFor(m=>m.MetaDescription)

        </td>
    </tr>

    <tr title="Geben Sie hier Stichworte für die Suchmaschienen ein. Trennen Sie diese mit einem Komma.">

        <td><b>Meta Stichworte (Suchstichworte)</b><br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a></td>
        <td>@Html.TextAreaFor(m => m.MetaKeyWords)</td>
    </tr>

    <tr title="Wenn diese Box markiert ist, wird der Beitrag im Frontend sofort nach dem Speichern sichtbar">
        <td><b>Beitrag direkt freigeben?</b><br />
            <a href="javascript:void(0)" class="create-content-help">Hilfe?</a></td>
        <td>

            @Html.CheckBoxFor(m => m.Locked)


        </td>

    </tr>

    <tr>
        <td title="Datei Anhänge sind Bilder, Videos oder Downloads. Sie können den Anhängen auch Rollen geben, wie etwa in Newsbeiträgen INDEX BILD  als Anzeige-Bild für den Newsbeitrag."><b>Dateianhänge:</b></td>
        <td>

            <div class="ui-widget">
	<div class="ui-state-highlight ui-corner-all" style="padding: 10px;">
		<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span>
		<strong>Noch nicht möglich:</strong> Sie müssen den Inhalt erst speichern, ehe Sie Anhänge registrieren können.</p>
	</div>
</div>
        </td>


    </tr>

</table>


Model:



public class nContentPostModel
    {
    
        public int ReferenceID {
            get;
            set;
        
        
        }
        
        //Eigenschaften
        /// <summary>
        /// Returns the ID of the Content
        /// </summary>
        /// 
        public int ID
        {
            get;
            set;
        }



        /// <summary>
        /// Returns the Title of the Content
        /// </summary>
        /// 
        [Required]
        public string Title
        {

            get;
            set;

        }
        /// <summary>
        /// Returns the Content Type of the Content
        /// </summary>
        /// 
        [Required]
        public string ContentType
        {

            get;
            set;

        }
        /// <summary>
        /// Returns the Category object
        /// </summary>
        /// 
        [Required]
        public object CategoryID
        {
            get;
            set;

        }

      
    
        /// <summary>
        /// Returns the Creators PK ID
        /// </summary>
        public object CreatorPKID
        {


            get;
            set;


        }

        /// <summary>
        /// Returns the Username of the Creator
        /// </summary>
        public string CreatorName
        {

            get;
            set;


        }

        /// <summary>
        /// Returns Boolean of the Locked Status of the Content
        /// </summary>
        /// 
        [Required]
        
        public bool Locked
        {

            get;
            set;

        }
        /// <summary>
        /// Returns the COMMA SEPERATED Meta-Keywords
        /// </summary>
        /// 
         [DataType(DataType.Text)]
        public string MetaKeyWords
        {

            get;
            set;


        }
        /// <summary>
        /// Returns the MetaDescription
        /// </summary>
        /// 
        [MaxLength(250)]
        [DataType(DataType.Text)]
        public string MetaDescription
        {

            get;
            set;


        }
        /// <summary>
        /// Returns the PreviewText
        /// </summary>
        /// 
        [Required]
        [DataType(DataType.Text)]
        [MaxLength(400)]
        public string PreviewText
        {

            get;
            set;


        }
        /// <summary>
        /// Returns the Content Long Text
        /// </summary>
        ///
        [Required]
        [UIHint("tinymce_jquery_full"), AllowHtml]
        public string LongText
        {

            get;
            set;


        }
    
    }

Ich weiß langsam keinen Rat mehr woran das liegen kann. Nach dem Der Fehler aufgetreten ist muss ich die Seite neuladen, da die Grids(Benutze dafür Flexigrid) nicht mehr geladen werden und auch jqueryUI Tabs nicht mehr funktionieren. Komischer Weise funktioniert das Öffnen und das Schließen noch der "Fenster".

Hat wer einen Tip für mich? Es passiert nur wenn ich ein Widget lade wo der Editor eingebunden ist.

Viele Grüße,

b0b0

26.06.2012 - 23:22 Uhr

Erledigt -

sorry für die späte Rückmeldung.

Deine Routingbeispiele waren perfekt und dank den letzten VS Stunden (Vernetzte System - Switch Routing Tabellen 😉 ) in der BS kam mir heut erst die zündene Idee.

Und die Lösung war einfach^^

Die "Adressierung" war falsch.

Undzwar dank der Erweiterung RouteDebugger (die ich euch nicht vorenthalten möchte, ist für NuGet Package Manager) kam ich darauf, dass der aufgerufene Namespace nicht stimmt.

Ich hatte im news Controller den namespace "Module.News" doch es wurde probiert den Projektstandartnamespace aufzurufen unter dessen Namen logischer Weise der News Controller nicht zu finden war.

Also für alle die neu im Routing sind wie ich das Toll hier hilft enorm:

http://nuget.org/packages/routedebugger

Kleine Info, das Tutorial auf der Herstellerseite ist veraltet. Einfach installieren wie dort beschrieben und hinterher nicht vergessen die DLL wieder zu löschen wenn ihr fertig seid;) der zeigt die debug info dauerhaft an solang die DLL vorhanden ist.

11.04.2012 - 21:31 Uhr

sorry für die späte rückmeldung 😉

Meintest du diesen Article? blogs.msdn.com/b/dparys/archive/2010/09/13/routen_2d00_in_2d00_aspnet_2d00_mvc_2d00_definieren.aspx

da es eine Portable Area ist sehe ich auf MVCcontrib -> Docu, dass ich den AreaName vorne dran hängen muss.

Ich habe daher jetzt folgendes probiert:
EDIT: Kleinen Denkfehler gefunden. Route hieß immer noch /{page}, habe ich geändert, geht leider trotzdem noch nicht 😦


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
using nCMSNET.ViewEngine;
using MvcContrib.PortableAreas;
using MvcContrib;
namespace nCMS_NET.News
{
    public class NewsRegistration:PortableAreaRegistration
    {   
        public override void RegisterArea(System.Web.Mvc.AreaRegistrationContext context, IApplicationBus bus)
        {
            /*context.MapRoute(
                "News_Default",
                 AreaName +"{controller}/{action}/{id}/{category}/{subcategory}",
                new { controller = "News", action = "Archive", id=UrlParameter.Optional, category =  UrlParameter.Optional, subcategory=UrlParameter.Optional }

                );
          */
             context.MapRoute(
              "News_Show_Paging",
               AreaName +"{controller}/{action}/{id}/{p}",
              new { controller = "News", action = "Show", id="", p=""}

              );

            /*
            context.MapRoute(
            "News_Show",
             AreaName + "{controller}/{action}/{id}",
            new { controller = "News", action = "Show", id = "" },
            new string[] { "MvcContrib.PortableAreas" }

            );*/
            RegisterAreaEmbeddedResources();
        }

        public override string AreaName
        {
            get { return "News"; }
        }
    }
}

Funktioniert bisher leider immer noch nicht.

Was mich wundert...es ist nicht die ASP.net 404 Seite.... ich glaub die vom IIS:

http://beta.networkfreaks.de/News/Show/TESTBEITRAG_2/2

Wie gesagt ohne die page gehts, obwohl ich nur eine Route drinnen habe:

http://beta.networkfreaks.de/News/Show/TESTBEITRAG_2

Hier der Code der kompletten Action des Controllers:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using nCMS_NET.nModules;
using Module.News.Models;
using nCMS_NET.CORE.SqlHelper;
using System.Data.SqlClient;
using nCMS_NET;
using nCMS_NET.Pagination;
using nCMS_NET.MemberShip;
using nCMS_NET.CORE.Permissions;
using nCMS_NET.CORE.Captcha;
using nCMS_NET.CORE.GlobalSettings;
namespace Module.News
{
    public class NewsController : Controller
    {

  
       


       
        [HttpGet]
        public ActionResult Show(string id="", string p ="") {

            int page = 0;
            int.TryParse(p, out page);

            if (String.IsNullOrEmpty(id)) throw new Exception("ID IS NULL!");
            SqlHelper Sql = new SqlHelper();
            Sql.SysConnect();
            if (page < 1) page = 1;
            SqlParameter[] P = new SqlParameter[] { new SqlParameter("@seo", id) };
            
            SqlDataReader R = Sql.SysReader("SELECT id FROM "+ new nCMS_NET.CORE.ThisApplication.ThisApplication().getSqlPrefix +"Content WHERE SEOname=@seo", P);
            List<nCMS_NET.Content.nContent> Entry = new List<nCMS_NET.Content.nContent>();
            List<nCMS_NET.Content.nContent> Comments = new List<nCMS_NET.Content.nContent>();
            
            if (!R.HasRows) return RedirectToActionPermanent("Code/404", "Error");
            else {

                R.Read();
                int idd = ((int)R["id"]);
                nCMS_NET.Content.ContentManagement.GetContent G = new nCMS_NET.Content.ContentManagement.GetContent(idd);
                nCMS_NET.Content.ContentManagement.GetContent C = new nCMS_NET.Content.ContentManagement.GetContent(new string[] { "eNewsComment" },null,null,"{prefix}Content.cDate","DESC",false,page,10,idd);
                                    
                Entry = G.getList();
                Comments = C.getList();
                if (Entry.Count == 0) RedirectToActionPermanent("Code/404", "Error");
                Entry[0].GenerateLink();
                if (Entry[0].ContentType != "eNews") RedirectToActionPermanent(Entry[0].TargetAction, Entry[0].TargetController);
                nPagingCollection pages = new nPagingCollection(C.TotalRows, 10);
                ViewData["TotalRows"] = C.TotalRows;
                ViewData["Show"] = Comments.Count;
                ViewData["Pages"] = pages;
                ViewData["Page"] = page;
            }

            R.Close();
            Sql.SysDisconnect();
            ViewData["Entry"] = Entry[0];
            ViewData["Comments"] = Comments;
           
            return View();
        }


        //
        // GET: /News/
        public ActionResult Index()
        {



            return RedirectToAction("Archive");
        }
        public ActionResult Archive(int id=1, string category = "", string subcategory = "")
        {



            int page = id;
            if (id < 1) page = 1;



            nCMS_NET.CORE.GlobalSettings.GlobalSettings G = new nCMS_NET.CORE.GlobalSettings.GlobalSettings();
            int max = 0;
            if (String.IsNullOrEmpty(G.Read("GLOBAL_NEWS_MAX_ENTRIES")))
            {

                G.Write("GLOBAL_NEWS_MAX_ENTRIES", "10");

            }
            max = Convert.ToInt32(G.Read("GLOBAL_NEWS_MAX_ENTRIES"));




            nCMS_NET.Content.ContentManagement.GetContent News = new nCMS_NET.Content.ContentManagement.GetContent(new string[] { 
    "eNews"
    
    }, null, null, "{prefix}Content.cDate", "DESC", false, page, max);


            List<nCMS_NET.Content.nContent> N = News.getList();
            nPagingCollection pages = new nPagingCollection(News.TotalRows, max);
            ViewData["TotalRows"] = News.TotalRows;
            ViewData["News"] = N;
            ViewData["Show"] = N.Count;
            ViewData["Pages"] = pages;
            ViewData["Page"] = page;

     
 
 
            return View();
}
    }
}



Ich hoffe ich stell mich gerade nich allzu unklug an, aber dieses Routing möchte irgendwie nicht in meinen Kopf 😕

09.04.2012 - 21:31 Uhr

Hi, danke für die schnelle Antwort.

Ich durchsuche grad einige MVC Tutorials....

Ich habe jetzt erstmal alle Routings in der PortableArea auskommentiert um nur News_Show zu testen mit Seitenzahlen.

Folgende Varianten hatte ich aus einen Tutorials (Codeproject glaub ich wars)

Leider immer noch 404:



       context.MapRoute(
              "News_Show_Paging",
               AreaName +"{controller}/{action}/{id}/{page}",
              new { controller = "News", action = "Show"}

              );

  • ohne id und page genauer zu definieren



       context.MapRoute(
              "News_Show_Paging",
               AreaName +"{controller}/{action}/{id}/{page}",
              new { controller = "News", action = "Show", id="", page=0}

              );



  • ebenfalls kein Erfolg



       context.MapRoute(
              "News_Show_Paging",
               AreaName +"{controller}/{action}/{id}/{page}",
              new { controller = "News", action = "Show", id="*", page="*"}

              );




Ich denke ich brauch im Sachen Routing ein genaues Tutorial oder sowas. Ich bin mir nicht mal sicher, ob eine Variante richtig war 😦

09.04.2012 - 18:43 Uhr

Hi!

Ich stehe vor folgendem Problem:

Wenn ich die URL News/Show/<Topicname> Aufrufe funktioniert alles. Möchte man jedoch in den Kommentaren die Seite (von 1 zu 2 zb) wechseln kommt bei News/Show/<Topicname>/1 eine 404 Seite.

Ich weiß leider nicht wo der Wurm drin ist.

Anbei das Script zum Registrieren der PortableArea:


public override void RegisterArea(System.Web.Mvc.AreaRegistrationContext context, IApplicationBus bus)
        {
            context.MapRoute(
                "News_Default",
                 AreaName +"{controller}/{action}/{id}/{category}/{subcategory}",
                new { controller = "News", action = "Archive", id=UrlParameter.Optional, category =  UrlParameter.Optional, subcategory=UrlParameter.Optional }

                );
            context.MapRoute(
              "News_Show",
               AreaName + "{controller}/{action}/{id}",
              new { controller = "News", action = "Show", id = UrlParameter.Optional},
              new string[] { "MvcContrib.PortableAreas" }

              );
            context.MapRoute(
              "News_Show_Paging",
               AreaName +"{controller}/{action}/{id}/{page}",
              new { controller = "News", action = "Show", id = UrlParameter.Optional, page = UrlParameter.Optional},
              new string[] { "MvcContrib.PortableAreas" }

              );
            RegisterAreaEmbeddedResources();
        }

Und so ist im news controller die Funktion Show aufgebaut:




public ActionResult Show(string id, int page = 1) {
//.....
ViewBag.P = page;
return View();
}


Warum erkennt er int page nicht?

Ich finde leider den Fehler nicht 😦

06.04.2012 - 23:55 Uhr

Hi, hab ein Backup vom hoster bekommen und aufgespielt. Alles wieder bestens 😃 Danke euch

04.04.2012 - 22:30 Uhr

gnaf...ich glaube ich hab den fehler....gerade die wichtigste datenbank die meiner webseite.... ist beschädigt...ich dachte mir gleich, dass bei sovielen einträgen 3mb niemals hinkommen könnte... alle tabellen fehlen 😦 SQL Server geht aber wieder....die beta umgebung ist da...samt inhalte... son mist 😦

04.04.2012 - 21:11 Uhr

Hi, ganz übersehn...

danke 😃

deinstalll zieht sich etwas hin....hoffe mal danach gehts wieder 😃

04.04.2012 - 19:53 Uhr

Danke.

Habe gehofft, um eine Neuinstallation rum zu kommen.

Bin mir jetzt nur nicht sicher, ob ich meine Datenbanken samt Inhalte verlieren würde.
Ich kann kein Backup Script starten, da ich auch übers MSSQL Server Management Studio (auf dem Server) nicht auf den Server komme.

Werden Datenbanken gelöscht bei einer Reperatur / Neuinstallation?

vg

b0b0

03.04.2012 - 23:35 Uhr

verwendetes Datenbanksystem: MSSQL2008 Express

Hi, seit einem Server Crash ist keine Verbindung mehr zum SQL Server von mir möglich.

Ich habe auf der ms Seite bereits alle beiden "Lösungsvorschläge" probiert und dies leider ohne erfolg.

Hier erstmal die Fehlermeldung:

Fehlermeldung:
Es kann keine Verbindung mit 'S15866430\NFSQLSERVER1' hergestellt werden.


ZUSÄTZLICHE INFORMATIONEN:

Es konnte eine Verbindung mit dem Server hergestellt werden, doch während des Handshakes vor der Anmeldung trat ein Fehler auf. (provider: Named Pipes-Provider, error: 0 - Kein Prozess ist am anderen Ende der Pipe.) (Microsoft SQL Server, Fehler: 233)

Hilfe erhalten Sie durch Klicken auf:
>


SCHALTFLÄCHEN:

OK

OS: Windows Server 2008 R2

Hoffe mir kann jemand helfen 😃

vg

b0b0

12.02.2012 - 13:13 Uhr

Danke funktioniert gut....also kleine rückfrage zur not google mich nochmal durch.....der datentyp vom parameter ist egal, der muss nur ID heißen oder?

12.02.2012 - 03:34 Uhr

Hi!

ich möchte gerne dass man per URL Aufruf zu Home/Index/{Seitennr} die Seiten der letzten Beiträge durchblättern kann.

Hier mein Code


    [HttpGet]
        [ValidateInput(false)]
        public ActionResult Index(string strpage = "1")
        {
            int page = 1;
            if (!int.TryParse(strpage, out page)) page = 1;



            nCMS_NET.CORE.GlobalSettings.GlobalSettings G = new CORE.GlobalSettings.GlobalSettings();
            int max = 0;
            if (String.IsNullOrEmpty(G.Read("GLOBAL_INDEX_MAX_ENTRIES"))) {

                G.Write("GLOBAL_INDEX_MAX_ENTRIES", "10");
            
            }
            max = Convert.ToInt32(G.Read("GLOBAL_INDEX_MAX_ENTRIES"));
            max = 1;
            nCMS_NET.Content.ContentManagement.GetContent News = new nCMS_NET.Content.ContentManagement.GetContent(new string[] { 
    "eNews",
    "eArticle"
    
    },null,null,max);

               List<nCMS_NET.Content.ContentManagement.PageInitializier> Pages =    new nCMS_NET.Content.ContentManagement().GetPages(News.TotalRows, 1212, 1111, max);

            if (page > 1) {

             News = new nCMS_NET.Content.ContentManagement.GetContent(new string[] { 
    "eNews",
    "eArticle"
    
    }, null, null, max,"{prefix}Content.cDate","DESC",false,Pages[(page-1)].PageStart);
            
            }

            List<nCMS_NET.Content.nContent> N = News.getList();
      
            ViewData["TotalRows"] = News.TotalRows;
            ViewData["News"] = N;
            ViewData["Show"] = N.Count;
            ViewData["Pages"] = Pages;
            ViewData["Page"] = page;

            return View();
        }


Soweit funktioniert es jedoch nur wenn ich strpage als QueryString aufrufe. Was mach ich falsch? Habe bereits gegooglet und nichts gefunden.

Wär nett wenn ihr mir vieleicht helfen könnt 😃

08.01.2012 - 23:08 Uhr

Hi ich Kämpfe zurzeit mit folgender Fehlermeldung:

Ein Attributargument muss ein constant-, typeof- oder Arrayerstellungsausdruck eines Attributparametertyps sein.

Ich habe eine SQL Tabelle. In der Strings gespeichert sind. Ich nenne sie "Language". Ich erstelle somit mehrere Packs von Language Strings.

Die Idee ist damit mehrere Sprachen auswählen zu können.
Hier möchte ich aus meiner Language Klasse gerne Name="User Name" ändern.

Name soll den Wert der besagten Zeile haben. Leider klappt das nicht so einfach wie ichs mir erhofft habe.

  [Required]
        [Display (Name=new Language("_REGISTER_USERNAME","Register","deDE")]
        public string UserName { get; set; }

Gibt es einen Weg den "Name" irgendwie zu ändern?

Vg

b0b0

05.01.2012 - 20:38 Uhr

Danke! Ich werd mir das anschauen. Sieht auf jedenfall vieeeel sauberer aus als mit diesen Plugins.

03.01.2012 - 20:22 Uhr

Hi!

Um etwas besser in MVC3 reinzukommen habe ich mir vorgenommen mein CMS, welches ich vorher ohne MVC3 gemacht habe in MC3 "neu" zu erstellen.

Diesmal habe ich mir was besonderes vorgenommen und weiß gerade nicht genau wie ich das am saubersten realisieren soll.

Ich möchte alles übersichtlich in Module unterteilt haben. Ähnlich wie bei Joomla.

Also möchte ich in Zukunft nur noch Module hinzufügen müssen ohne was an der "Haupt" DLL oder ähnlich zu ändern.

Ich dachte da an einen Ordner in dem ViewUserControls liegen. Leider sollen die Module ja auch Code mit sich führen und da ich gerne code und HTML so gut es geht getrennt habe möchte wär das nur die Notlösung.

Zwar habe ich in VS gesehen, dass die Controls auch CodeFile und CodeBehind Attribute haben können, doch kann ich nirgends ein Beispiel für sowas finden. Wirklich sauber klingt das auch nicht.

Hat jemand einen Rat für mich? Es geht erstmal nur darum ein "modul" zu laden und Inhalt aus einer Datenbank anzuzeigen.

Danke

b0b0

26.11.2011 - 11:33 Uhr

Mir wird leider keine Fehlermeldung zurückgegeben.

Ich werde die Klasse wie ihr sagt nochmal umstrukturieren.

Dass aber 1&1 das Versenden per SMTP ohne Authentifizierung zulässt, wär mir neu. Das macht kein Mailing-Anbieter mehr. Dann würde auch eine Exception bei Send() auftauchen. Aber Du lieferst hierzu leider keinerlei Informationen - außer "geht nicht".

Das ist es! Stimmt ich bin ja nicht mehr auf den gleichen Server wie der Email Server.

26.11.2011 - 11:17 Uhr

Hi

Also ich weiß, dass in der Klasse alles funktionierte. Ich habe vor den Umzug und auch danach nichts geändert.

Wie man sieht werden die Emails ebenfalls in eine SQL Tabelle geschrieben.

Ja die landen auch dadrinn - nur geht irgendwie die email nicht raus.

25.11.2011 - 19:53 Uhr

Hi!

Seit ich meine Webanwendung auf .NET 4 konvertiert habe geht meine Email Funktion nicht mehr.

Das komische. Ich bekomme nicht einmal eine Fehlermeldung. Hat sich in .NET irgendwas verändert?

Anbei meine Mehtode:



namespace NFMAILER
{
    public class NFmail
    {
        public NFmail()
        {

            //
            // TODO: Konstruktorlogik hier hinzufügen
 
        }

        public string NFSendEmail(string emailto, string subject, string htmltext)
        {
            try
            {
                string EMAILTPL = File.ReadAllText(HttpContext.Current.Server.MapPath("HTML_TPLs/email.htm"));
                //Rendering Subject 
                EMAILTPL = EMAILTPL.Replace("($)PLACEHOLDER->SUBJECT", subject);
                //Rendering Text
                EMAILTPL = EMAILTPL.Replace("($)PLACEHOLDER->TEXT", htmltext);
                //Generating Code
                string code = emailto.GetHashCode() + "_" + DateTime.Now.Millisecond;

                string code3 = "_($)_" + subject.Replace(" ", "_").Replace(".", "-");
                string emailcode = code.Replace(" ", "-") + "." + code3;
                EMAILTPL = EMAILTPL.Replace("($)PLACEHOLDER->CODE", emailcode);
                //Email einschreiben
                SqlConnection emailcon = new SqlConnection(new portalSQLConnection.portalSQLConnection().GetConnectionString());
                emailcon.Open();

                SqlCommand InsE = new SqlCommand("INSERT INTO dbo278467131.n_emails(subject,text,emailcode,Datum) VALUES(@subj,@txt,@code,@datum)", emailcon);
                InsE.Parameters.AddWithValue("@subj", subject);
                InsE.Parameters.AddWithValue("@txt", htmltext);
                InsE.Parameters.AddWithValue("@code", emailcode);
                InsE.Parameters.AddWithValue("@datum", DateTime.Now);
                InsE.ExecuteNonQuery();
                InsE.Dispose();
                emailcon.Close();

                //Email Senden
                SmtpClient CL = new SmtpClient("smtp.1und1.de");
                MailMessage MSG = new MailMessage();
                MailAddress FROM = new MailAddress("support@networkfreaks.de", "NetworkFreaks.de - Die Community");
                MailAddress TO = new MailAddress(emailto);
                MSG.To.Add(TO);
                MSG.From = FROM;
                MSG.ReplyTo = FROM;
                MSG.Subject = subject;
                MSG.Body = EMAILTPL;
                MSG.IsBodyHtml = true;
                CL.Send(MSG);
                CL = null;
                // Fertig
                
             
                return "Gesendet";
            }
            catch (Exception ex)
            {

                return (ex.ToString());

            }
        }



    }
}

Woran kann das nur liegen?

Bin für jede Hilfe dankbar.

11.11.2011 - 14:52 Uhr

danke dir hat mir sehr geholfen 😃

10.11.2011 - 18:06 Uhr

Hi!
Ich habe seit einer Woche einen eigenen Server, statt sharing Hoster.

Im Adminpannel, senden wir logischer Weise HTML hin und her für die News. Leider lässt das das .NET Framework 4 nicht mehr zu

stattdessen bekomme ich beim speichern eines Newsbeitrages die Meldung:

Ein möglicherweise gefährlicher Request.Form-Wert wurde vom Client...

Es handelt sch hierbei um eine ASHX Datei. Also einen URL Handler.

Die Tricks, mit dem validationMode ändern und <pages validateRequest="false"/> funktionieren leider nicht und enden in einer IIS 7 Fehlerseite: "Die Resource kann nicht angezeigt werden".

Wie könnte ich das Problem beheben?

Vg

b0b0

24.10.2011 - 23:14 Uhr

Hi,

dies ist eine Klasse, um aus einem größeren Text Keywords zu ermitteln.

Die Klasse basiert auf einen einfachen Prinzip:

Zu wieviel Prozent muss das Wort im Text vorkommen?
Wie lang muss es mindestens sein?

Ein Beispiel, was ich in einen anderen Forum gepostet hatte:


<%@ WebHandler Language="C#" Class="t" Debug="true" %>

using System;
using System.Web;
using System.Xml;
using System.Configuration;
using System.Web.Services;
using System.Text.RegularExpressions;
using NFreakDev.MetaKeyWordGen;




public class t : IHttpHandler {
    
   

    public void ProcessRequest(HttpContext context)
    {
        string text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
        //Deklarieren wir eine neue Instanz der Klasse
        MetaKeyWordGen Gen1 = new MetaKeyWordGen();
        //Setzen wir den Text fest
        Gen1.Text = text;
        //Wieviel Prozent brauchen wir?
        Gen1.PercentNeeded = 1;
           string Keyw = "Die Keywords lauten: \"";
        string[] keywords = Gen1.GetMetaKeys;
        for (int i = 0; i < keywords.Length; i++) {

           Keyw += keywords[i] +",";
            
          
        }
        ///Enfernen unnötiger KOMMA
    if(Keyw.EndsWith(","))Keyw = Keyw.Remove(Keyw.LastIndexOf(","));
        //Ausgabe
       context.Response.Write(Keyw +"\"");
        
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

Die Klasse als DLL , sowie als .CS Datei stelle ich euch gerne im Anhang zur Verfügung.

11.10.2011 - 20:04 Uhr

Hi,

@last

Ich habe bereits mit denen telefoniert über mein Vorhaben. Die haben bloß Prozesse starten blockiert, damit man keine Daten anderer Kunden auslesen kann.

Finde ich auch richtig.

@talla
Danke für den Tip. Also die FLV Formate auf meiner Webseite solln eher zum schnell angucken sein und nicht lange laden müssen. Also eher YT 360PI Qualität.

Die MKV convertiere ich momentan (bitte korregiert mich wenn es einen besseren weg gibt), da diese HD Fähig sein soll mit dem Divx Converter auf maximale Qualität.

Da die Probezeit zu DIvx+ bald abläuft - bin ich mir noch unschlüssig ob ich nicht auf ne Freeware Variante umsteige danach. Wie dem auch sei wenn es irgendwie möglich ist die Videos direkt zu converten wärs hinfällig;).
@first
DirectShow werde ich mal googlen.

10.10.2011 - 23:42 Uhr

Hi!

mein Hoster verbietet mir leider die nUtzung der FFMEG.exe auf meinen Webspace.

Ich suche fürs neue Adminpanel darum eine Möglichkeit. WMV; AVI und MPEG Dateien in die Formate MKV und FLV zu konvertieren.

Gibt außer auf eine Exe zuzugreifen irgend eine Möglichkeit dies in C# zu verwirklichen ?

Wäre toll wenns gehen würde, da das Video konvertieren Zeit besnprucht die angenehmer gleich im Erstellen eines Newsbeitrages oder Artikells geschenen kann.

Vg

b0b0

08.10.2011 - 15:34 Uhr

ok ja die sessions sind das problem...

habe mir folgendes überlegt....ein einmaliger md5 hash wird in eine sql tabelle "admin_sessions" mit der user id und halt dem hash gespeichert....

den sende ich dann zur überpürfung mit.

Habe ja in der HTML eine globale cfg variable:
(js)



     var nfCFG = {
            appFolderPath: 'JS/system/SYSM',
            AccessURL: 'http://....'
        };


da füge ichd ann eiinfach das attribut "accessSessions: ''" hinzu wo dann die sessions gespeichert wird.

Sollte jemand eine sichere Möglichkeit kennen, bin da ganz ohr 😉

aber soweit meine lösung

08.10.2011 - 12:32 Uhr

Hi!

das komplette Admininterface meiner Seite soll in ExtJS Sein....da ich keinen funktionierenden Multifileuploader gefunden habe für ExtJS 4 mixe ich nun ExtJS mit Jquery.

Soviel dazu.

Hier wird der Uploader erstellt (nahezu 1:1 aus der Docu) :


var menu_news = new Ext.menu.Menu({
    id: 'newsmenu',
                transitionType: 'slide',
                direction: 'vertical', // default
                delay: 0.7,              // default
                autoWidth: true,         // default
                transitionDuration: 1.3, // default
                animate: true,
                style: 'margin-bottom: 20px; bottom: 20px',     
    items: [{
            text: 'News verwalten',
            handler: clickHandler
        },
        new Ext.menu.Item({
            text: 'News erstellen',
            handler: function(){
            
            NewsCreate.show();
            
        //UploadField - News init
        
            var lastas = {
                swfuploadLoaded: function (event) {
                    $('.log', this).append('<li>Loaded</li>');
                },
                fileQueued: function (event, file) {
                    $('.log', this).append('<li>File queued - ' + file.name + '</li>');
                    // start the upload once it is queued
                    // but only if this queue is not disabled
                    if (!$('input[name=disabled]:checked', this).length) {
                        $(this).swfupload('startUpload');
                    }
                },
                fileQueueError: function (event, file, errorCode, message) {
                    $('.log', this).append('<li>File queue error - ' + message + '</li>');
                },
                fileDialogStart: function (event) {
                    $('.log', this).append('<li>File dialog start</li>');
                },
                fileDialogComplete: function (event, numFilesSelected, numFilesQueued) {
                    $('.log', this).append('<li>File dialog complete</li>');
                },
                uploadStart: function (event, file) {
                    $('.log', this).append('<li>Upload start - ' + file.name + '</li>');
                    // don't start the upload if this queue is disabled
                    if ($('input[name=disabled]:checked', this).length) {
                        event.preventDefault();
                    }
                },
                uploadProgress: function (event, file, bytesLoaded) {
                    $('.log', this).append('<li>Upload progress - ' + bytesLoaded + '</li>');
                },
                uploadSuccess: function (event, file, serverData) {
                alert(serverData);
                    $('.log', this).append('<li>Upload success - ' + file.name + '</li>');
                },
                uploadComplete: function (event, file) {
                    $('.log', this).append('<li>Upload complete - ' + file.name + '</li>');
                    // upload has completed, lets try the next one in the queue
                    // but only if this queue is not disabled
                    if (!$('input[name=disabled]:checked', this).length) {
                        $(this).swfupload('startUpload');
                    }
                },
                uploadError: function (event, file, errorCode, message) {
                    $('.log', this).append('<li>Upload error - ' + message + '</li>');
                }
            };

            $('.swfupload-control').bindAll(lastas);


            // start the queue if the queue is already disabled
            $('.swfupload-control input[name=disabled]').click(function () {
                if (!this.checked) {
                    $(this).parents('.swfupload-control').swfupload('startUpload');
                }
            });

        $('.swfupload-control').each(function () {
                $(this).swfupload({
                    upload_url: "./DLL/Upload.aspx",
                    file_size_limit: "10240",
                    file_types: "*.*",
                    file_types_description: "All Files",
                    file_upload_limit: "0",
                    flash_url: "./JS/multiuploader/vendor/swfupload/swfupload.swf",
                    button_image_url: './JS/multiuploader/vendor/swfupload/XPButtonUploadText_61x22.png',
                    button_width: 71,
                    button_height: 22,
                    button_placeholder: $('.button', this)[0],
                    debug: true
                });
            });


   

            }
        })
    ]
});


Normale Uploads über ein Simples HTML Form funktionieren.

Hier die Upload.aspx

ASPX:



<%@ Page Language="C#" AutoEventWireup="true" Debug="true" CodeFile="Upload.aspx.cs" Inherits="SystemManagement_DLL_Test" %>



Codefile:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
public partial class SystemManagement_DLL_Test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (  Session["__SYSTEMMANAGESESSIONUSER"] != null && Session["__SYSTEMMANAGESESSIONPASSW"] != null && Session["__SYSTEMMANAGESESSIONUID"] != null)
        {
            HttpFileCollection images = Request.Files;
            Response.Write("SESSION OK");
            for (int x = 0; x < images.Count; x++)
            {



                images[x].SaveAs(Server.MapPath("../uploads/" + Path.GetFileName(images[x].FileName)));

                Response.Write(images[x].FileName + " saved");


            }
        }
        else {

throw new Exception("NO SESSION FOUND!");
        }
    }
}

ich denke dass er "NO SESSION FOUND!" zurück gibt, leider gibt mir das Plugin nur den Fehlercode, würde gerne an die Serverantwort kommen die das SWF bekommt.

Kann es sein dass die Session für FlashUploads alle "null" sind?

03.10.2011 - 20:42 Uhr

Danke. Habe jetz JSON.net zum laufen bekommen.

Etwas muss ich die Ausleseeinstellungen von ExtJS ändern aber es geht. Aber was du sagst ist richtig... hoffe da legt MS mal nach.

Edit: Sehr umständlich ist, dass man für das wofür ich den jsonstring brauche für jede Aktion ne eigene klasse braucht die dann in json converted wird..... doof jetz wo ich fertig bin dass man ganze sqlDataAdapter und Reader auch convertieren kann -.- ich sollte mir angewöhnen tutorials bis zum ende zu lesen^^

03.10.2011 - 13:42 Uhr

Hi!

Da ich in meiner Ausbildung gerade ExtJS lerne und damit auch schon ziemlich weit gekommen bin, wollte ich mich auch Privat damit befassen und so schneller vorran kommen.

ExtJS arbeitet viel mit JSON.

{"success": "true", "data":[{...}]}

so in etwa sieht der json string aus wenn etwas erfolreich war und die daten angefordert werden solln.

Auf der Arbeit arbeite ich mit PHP da gibt es ganz einfach den Befehl json_decode / json_encode

damit kann man ganz arrays in json konvertieren.

Was ich für ExtJS zb für Grids brauche. Ich arbeite Privat jedoch mit ASP.net c# und suche dafür eine Klasse für JSON:

Mein Hoster updatet das Framework erst gegen Ende des Jahres somit ist die Frameworkversion 2.5.

Ich weiß es gibt dieses Extasp.net aber würde den manuellen weg, wie ich es auch in PHP mache vorziehen. Alles was mir fehlt ist eine kompatible JSON Klasse.

Kennt jemand eine von euch?

Folgende habe ich bereits gefunden und probiert:

  • Json.Net (Fehler: Optionale Parameter sind nicht zulässig)
  • Jayrock (Lässt sich nicht mittels using einbinden bei mir)

Vg

b0b0

18.09.2011 - 14:38 Uhr

Also im Endeffekt wär MVC die richtige Entscheidung wenns .NET sein soll richtig?

18.09.2011 - 14:20 Uhr

bin bei 1un1 und da sehr zufrieden 😉

Man hat im HP Win Buisnees Paket für rund 30€ im Monat viele extras dabei und 10 incl. Domains dazu kommen bis 10 Datenbanken für MSSQL und mehrere Möglichkeiten die Seite in diverse Suchmaschienen einzutragen.

Service ist ok - laut meinen letzten Ticket wirds bald aufs neue .NET Framework geupdatet

18.09.2011 - 14:14 Uhr

Hi,

das CMS, was ich gerade umschreibe für den Public Release soll leicht anpassbar sein.

Was braucht man also um es leicht anzupassen? Templates.

In manchen Fällen sogar mehere Templates die in einen dann zusammen fließen. (News + Comments z.B.)

Ich habe mir da folgendes Gedacht und bitte schlag mich nicht dafür:

Das CMS soll in Gegensatz zu anderen Einwandfrei auf Sharing Hostern laufen können.

Was natürlich viel "Drumherumschreiben" benötiogt - ist mir klar.

Sehe ich das richtig....die einzige möglichkeit die annährend an das Templatesystem in PHP (wenn man eins geschrieben hat) ran kommt ist das MVC was mit .NET 3 rauskam?

18.09.2011 - 14:09 Uhr

Wenn ichs richtig verstehe geht ein Popup auf zu einer neuen Seite richtig?

benutz einfach jquery;)

direkt unters bodytag (auf der seite die geöffnet wird) ein <div> mit den style werten:

z-index:1000;
position: absolute;
am besten eine Hintergrundfarbe wie etwa #FFF

da schreibst du rein: "Seite wird geladen bitte warten <img src="ladegrafik.gif">"

gib dem div die id "loader"

und nun der JScode:



<script type="text/javascript">

$(document).ready(function(){


$('#loader').fadeOut('fast');

});

</script>

Ungetestet...sollte aber funktionieren.

18.09.2011 - 00:04 Uhr

Hi!

Seit dem letzten Update von FireFox ( 6.0.2 ) gehen keine onClick Events mehr von den ASP Buttons.

Als Fehlermeldung kommt zb für die Registrierung: Could not convert JavaScript argument arg 0 [nsISupports.QueryInterface]

in FireBug... im endeffekt funktionieren nur noch meine Jquery Ajax Forms (Shoutbox und Nachricht versenden).

Hat jemand das gleiche Problem oder sogar eine Lösung?

Meine Komplette Webseite (Kommentarfunktion, Forum) liegt brach 😦

Edit: auch im IE geht nix mehr.

Edit 2: Alle die den fehler auch haben. Entfernt den Required Field Validator.... der verursacht irgendwie diesen Fehler. Hab ihn durch was eigenes (nicht vom ajax toolkit) ersetzt und schon geht wieder alles 😃

01.09.2011 - 07:03 Uhr

bestiimmt hab ich einfach irgendwas übersehen....danke 😃

hier die RAR