Laden...

Forenbeiträge von Steffo Ingesamt 45 Beiträge

15.09.2013 - 23:18 Uhr

Danke, aber das ist problematisch, weil es durchaus Dateien gibt, die auch vorher einen Whitespace im Dateinamen hatten und manche Dateien fingen mit einem Punkt an und manche haben gar keine Endung und somit keinen Punkt.
Man muss sich also auf das "UTC" in den Klammen beziehen!

EDIT: Das wird bswp. nicht erkannt: " (2013_08_13 12_16_05 UTC).gitignore".

Liebe Grüße
Steffo

15.09.2013 - 22:43 Uhr

Hi,
ich habe eine Windowssicherung unter Linux manuell hergestellt. Nun habe ich dummerweise Dateien die bspw. auf folgende Weise umbenannt wurden: "SN200395 (2013_08_04 14_18_38 UTC).JPG". Ursprünglich hieß sie mal "SN200395.JPG".
Ich möchte mir nun ein Skript schreiben, das mir alle Dateien automatisch umbenennt. Der Regexausdruck (UTC) scheint bei diversen Online-Regex-Testern nicht zu funktionieren und wie der Ausdruck aussehen soll, der mir dann die Dateien ersetzt, weiß ich auch nicht.

Hat jemand eine Idee wie ich das umsetzen muss?

Danke im Voraus!

L. G.
Steffo

11.09.2013 - 15:02 Uhr

Ich lass es einfach so. Das Problem hat nicht direkt etwas mit Datenbanken zu tun, sondern ist eher ein konzeptionelles.
Egal, ich lass es so.

L. G.
Steffo

11.09.2013 - 11:41 Uhr

Hallo,
ich baue eine multilinguale Website auf. Nun ist es so, dass ich eine Tabelle aufliste die zwar ein NavigationProperty Country enthält, allerdings ist in diesem Objekt lediglich die ID und der ISO-Code enthalten.
Es gibt nun eine zweite Tabelle namens CountryLanguage. Hier ist die jeweilige Übersetzung enthalten. Die Tabelle setzt sich aus CountryID, LanguageID und die jeweilige Übersetzung zusammen. Ich habe sogar für die aufzulistende Tabelle das NavigationsProperty CountryLanguage.

Meine Frage: Wie kann ich nun äußerst geschickt und mit wenig Aufwand die Übersetzung anzeigen?

Momentan iteriere ich durch die zu anzeigenden Objekte und ersetze den IsoCode durch die Übersetzung. Da die Objekte sowieso nicht gespeichert werden, ist das auch ungefährlich.
Jemand eine bessere Idee?

L. G.
Steffo

09.09.2013 - 16:29 Uhr

Danke, für eure Antworten!
Anscheinend gibt es ganz allgemein Probleme, denn es wird immer die 0-Sequenz zurückgegeben:

public ActionResult Edit(string guid = "00000000-0000-0000-0000-000000000000")
{
	System.Guid parsedGuid = System.Guid.Parse(guid);
	// ...
}
routes.MapRoute(
                "User",
                "{controller}/{action}/{guid}",
                new
                {
                    controller = "SalesAgent",
                    action = "Edit",
                }
            );

Ich habe nun den Parameter "guid" der Einfachheit halber einfach wieder in "id" mit dem Typ string umbenannt und nun geht's wieder! 😃

L. G.
Steffo

09.09.2013 - 14:05 Uhr

Hallo,
ich möchte gerne eine neue Route definieren bei der eine GUID übergeben wird.
Ich habe das folgend in RouteConfig.cs umgesetzt:

routes.MapRoute(
	"User",
	"{controller}/{action}/{guid}",
	new
	{
		controller = "SalesAgent",
		action = "Edit",
		guid = System.Guid.Empty
	}
);

SalesAgent.Edit sieht so aus:

public ActionResult Edit(System.Guid guid)
{
	User salesagent = db.User.Single(s => s.Guid == guid);
	//...
}

Fehlermeldung:
Beschreibung: Unbehandelte Ausnahme beim Ausführen der aktuellen Webanforderung. Überprüfen Sie die Stapelüberwachung, um weitere Informationen über diesen Fehler anzuzeigen und festzustellen, wo der Fehler im Code verursacht wurde.

Ausnahmedetails: System.ArgumentException: Das Parameterwörterbuch enthält einen NULL-Eintrag für den Parameter "guid" des Typs "System.Guid", der NULL nicht zulässt, für die Methode "System.Web.Mvc.ActionResult Edit(System.Guid)" in "Sales.Controllers.SalesAgentController". Optionale Parameter müssen Verweistypen oder Typen sein, die NULL zulassen, oder als optionale Parameter deklariert werden.
Parametername: parameters

Weiß hier jemand weiter?

Danke im Voraus!

L. G.
Steffo

05.09.2013 - 16:01 Uhr

Ist nett, danke! 😃

L. G.
Steffo

30.08.2013 - 17:26 Uhr

Thx! Scheint mir auf dem ersten Blick weitergeholfen zu haben. - Unglaublich! Ich musste aus einem MVC3-Projekt einige Dateien in meinem MVC4-Projekt ersetzen!

Replace the AccountController.cs and AccountModels.cs in an ASP.NET MVC 4 Internet project with one from an ASP.NET MVC 3 application (you of course won't have OAuth support). Then, if you want, you can go through and remove other things that were built around SimpleMembership - the OAuth partial view, the NuGet packages (e.g. the DotNetOpenAuthAuth package, etc.)

L. G.
Steffo

29.08.2013 - 17:56 Uhr

Danke, aber ist OAuth Providers nicht etwas anderes als das ASP.net Membership?

Soweit ich weiß, gibt es drei Frameworks:

  • Membership (etwas älter. Hat man glaube ich bei WebForms verwendet.)
  • SimpleMembership (wird aktuell in MVC 4 verwendet)
  • OAuth Providers, um sich über einen fremden Anbieter wie Facebook, Google etc. zu identifizieren.

Ich suche ein Tutorial wie man Membership mit MVC4 verwendet.

L. G.
Steffo

29.08.2013 - 14:44 Uhr

Ok, danke, für die Antwort.
Ich muss mich konkretisieren: Ich soll das Membership Framework von ASP.net verwenden. Gibt es da ein Tutorial, das aufzeigt, wie man damit mit MVC arbeitet? Also auch die konkrete Benutung.

L. G.
Steffo

28.08.2013 - 21:46 Uhr

Hallo,
kennt jemand ein Tutorial zur Benutzer-Authentifizierung mit MVC 4? Ich habe nur welche zu MVC 3 gefunden.

Danke im Voraus!

L. G.
Steffo

28.08.2013 - 20:46 Uhr

@Robin0: Wie mach ich dann die Validierung? Manuell mit jQuery?

@malignate: Danke, ist ein Anfang!

L. G.
Steffo

28.08.2013 - 13:46 Uhr

Hallo,
ich habe eine Create-Form mit Datumsangaben in der auch eine Validierung der Daten gemacht wird.
Lokal läuft alles wunderbar, wenn ich aber die Applikation auf meinem Server hochlade, wird das englische Datumsformat genommen und ich bekomme die Fehlermeldung, dass meine Angaben nicht dem Datumsformat entsprichen.

Wie kann ich nun einerseits eine Validierung haben und andererseits ein deutsches Datumsformat?

Danke im Voraus!

L. G.
Steffo

27.08.2013 - 15:53 Uhr

Hallo,
ich verwende das PagedList.Mvc-Plugin mit dem ich bei einer Datenübersicht die Daten in mehrere Seiten aufteilen kann. Nun würde ich gerne bei dem Link, der generiert wird, eine CSS-Klasse hinzufügen. Mit @Url.Action ist das nicht möglich. Hat jemand eine Idee wie ich das umsetzen kann? Bin für verschiedene Lösungsansätze offen!

@Html.PagedListPager(Model.Companies, page => Url.Action("Index", "Company", new { page }))

L. G.
Steffo

Edit: Ich spreche die nötigen Elemente nun einfach über Selektoren an...

26.08.2013 - 14:48 Uhr

Das Problem hat sich doch nicht erledigt. Ich hatte versehentlich immer denselben div ("#dashboard") beim Ajax-Laden für unterschiedlichen Content benutzt.
Es wird also immer noch der alte Content angezeigt!

26.08.2013 - 14:34 Uhr

Nachtrag: Das Problem scheint sich dadurch zu erledigen, in dem ich den anderen Content ebenfalls einfach per Ajax lade... Seltsam!

L. G.
Steffo

26.08.2013 - 14:32 Uhr

Hi,
ich hoffe, einige von euch haben Bootstraperfahrungen.
Ich mache damit Tabs und je nach dem welcher Tab angeklickt wird, wird entsprechender Content über Ajax geladen. Das Dumme ist, dass bei einem Tabwechsel zwar der neue Content angezeigt wird, der alte jedoch nicht verschwindet!

<ul class="nav nav-tabs" id="tab-overview">
	<li class="active"><a href="#dashboard">Dashboard</a></li>
	<li><a href="#teams">Teams</a></li>
</ul>
	 
<div class="tab-content">
	<div class="tab-pane active" id="dashboard">Dashboard</div>
	<div class="tab-pane" id="teams">Teams</div>
</div>

<script>
    $('#tab-overview a[href="#dashboard"]').click(function (e) {
        e.preventDefault();
        loadToDivByGet("/SalesAgent/Dashboard/2", "dashboard"); // HTML-Content in div mit der ID "dashboard" laden!
	    $(this).tab('show');
    });

    $('#tab-overview a[href="#teams"]').click(function (e) {
        e.preventDefault();
        // Hier wird noch nichts per Ajax geladen, sondern nur der fixe Content "Teams" angezeigt, der in HTML fest "einprogrammiert" ist!
        $(this).tab('show');
    });
</script>

Wenn ich nun den Dashboard-Tab anklicke, wird per Ajax der richtige Content geladen. Wechsle ich nun zu "Teams", wird zusätzlich(!) weiter unten "Teams" angezeigt, also so, wie es in HTML fest einprogrammiert ist, aber der alte Dashboard-Content verschwindet nicht.

Jemand eine Idee?!

Danke im Voraus!

L. G.
Steffo

26.08.2013 - 14:19 Uhr

Da hast du mich aber auf etwas aufmerksam gemacht! Danke! 😃

L. G.
Steffo

26.08.2013 - 14:15 Uhr

Hallo,
ich habe mehrmals beobachtet, dass ich zwar HTML-Content über Ajax in einem div laden kann, ihn aber zu Debug-Zwecken nicht im Quellcode sehen kann (Firefox).
Weiß jemand woher das kommt und wie ich das Problem umgehen kann?

Danke im Voraus!

L. G.
Steffo

22.08.2013 - 19:46 Uhr

Hallo,
ich scheitere momentan mein Projekt nach Windows Azure zu deployen. Z. B. wird "Site.css"-Datei, die standardmäßig in MVC-Projekten generiert wird, nicht in HTML eingebunden. Wenn ich ein Release-Deploy mache, wird zwar versucht die Datei in HTML zu verlinken, aber da hängt noch "v=" hinten dran. Wenn ich ein Debug-Deploy mache, wird sie überhaupt nicht verlinkt. Ähnliches gilt teilweise für andere Ressourcen.

Hat jemand eine Idee, woran das liegt?

Danke, im Voraus!

L. G.
Steffo

20.08.2013 - 16:10 Uhr

Ok, ich habe das Skript nun in das div gepackt und nun wird es immer neu mit dem div geladen, d. h. es kriegt immer die aktualisierten DOM-Elemente (a). So klappt es nun!

Achja: Ich hatte anschließend einen neuen Bug entdeckt. Ich kann euch nur sagen: Nennt eure Funktionen NIEMALS eval()!!! Das verträgt sich nicht mit jQuery!!!

L. G.
Steffo

20.08.2013 - 15:19 Uhr

Hallo,
nun funktioniert es teilweise wie es soll, da ich eine Validierung beim Laden des Dokuments abgeschalten habe ( 🤔 ), allerdings funktioniert es nicht zwei mal hintereinander (ich habe nun den restlichen JavaScript-Code auskommentiert).
Muss das Dokument für JavaScript evtl. neu validiert werden? Weil der ActionLink wird ja beim Ajax-Laden ebenfalls neu generiert und damit geht er vielleicht für den JavaScript-Interpreter verloren. Sehe ich das richtig?!

L. G.
Steffo

20.08.2013 - 14:59 Uhr

Hi,
ich nochmal:
Dein Lösungsvorschlag ist wirklich klasse, nur funktioniert er momentan leider nicht dort, wo er soll.


<div id="company-overview" style="width: 100%">
    @{Html.RenderAction("CompanyOverview", "Company", null);}
</div>

<script>
    $("a").click(function (event) {
        event.preventDefault();
        alert("jsads");
    });
</script>

Im div "company-overview" werden die ActionLinks generiert die ich manipulieren will.
Das Witzige ist, dass der Code wunderbar im Menü funktioniert (_layout-View), das ebenfalls ActionLinks verwendet, aber die ActionLinks der View "CompanyOverview" gar nicht betroffen sind!

Kann es irgendwie sein, dass RenderAction() die View als allerletztes - also noch vor dem JavaScript - generiert wird und es dadurch zu Problemen kommt?! Dasselbe Problem habe ich jedoch mit auch Html.Action()...

Danke im Voraus!

L. G.
Steffo

20.08.2013 - 13:11 Uhr

OK, danke, ich werde mich da mal schlau machen! 😃

L. G.
Steffo

20.08.2013 - 12:11 Uhr

Ja, ich will lediglich den Inhalt eines divs aktualisieren.
Richtig, ich kann beim ActionLink den Controller angeben, nur wenn ich gerade auf einer Seite eines fremden Controllers bin, dann werde ich auf die Seite des anderen Controllers weitergeleitet. - Gar nicht gut!

L. G.
Steffo

19.08.2013 - 16:00 Uhr

Hallo Leutz (, hallo Abt ^^')!
Ich suche eine Alternative zu ActionLink!
Mein Problem: Ich verwende PartialView und RenderAction in verschiedenen Controllern. Nun habe ich an einer Stelle ActionLinks und wenn ich bei einem fremden Controller bin, wird nicht nur die Action ausgeführt, sondern ich werde dummerweise auch noch auf eine andere Seite weitergeleitet.

Wahrscheinlich muss ich da mit Ajax rangehen, womit ich auch schon erfolgreich gearbeitet habe.
Ich würde folgendermaßen vorgehen:
Ich erzeuge einen HTML-Link mit einer eindeutigen ID. Der Link verweist auf einen nicht vorhandenen Anker ("#"). Nun schreibe ich mit JQuery folgenden Code.

$('a#meine-id').onClick(function() {
   //Ajax-Call. Danach lade div neu!
});

Frage: Ist das eine gute und saubere Herangehensweise?

L. G.
Steffo

19.08.2013 - 10:25 Uhr

Oh, ich hab den Fehler schon gefunden!
Wenn ich Parameter in der URL abfrage, die nicht existieren, erhalte ich einen Fehler!

Hat sich also erledigt! 😃

L. G.
Steffo

19.08.2013 - 10:21 Uhr

Hallo,
ich habe ein Problem mit Regular Expressions.
Dieser Code funktioniert wunderbar, wenn ich ein Parameter mit skalaren Werten aus der URL auslesen möchte:

$.urlParam = function (name) {
        var results = new RegExp('[\\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
        return results[1] || 0;
    }

Wenn ich allerdings Parameter mit mehreren Werten per Komma trenne (in der URL als "%2C" dargestellt), dann funktioniert die Funktion nicht mehr sobald ich skalare Werte abfrage.

Konkret:

$("#search").keyup(function () {
        var url = '';

        alert($.urlParam('filterForLanguage')); // Das hier funktioniert noch!

        if (window.location.href.indexOf('&') > 0) {
            url += '&excludeSalesAgents=' + $.urlParam('excludeSalesAgents'); //HIER springt die Funktion raus!
            url += '&filterForLanguage=' + $.urlParam('filterForLanguage');
        }
});

Die Abfrage von "excludeSalesAgents" funktioniert nicht mehr. Das Komische ist, dass jener Code wunderbar funktioniert, wenn ich den Parameter "filterForLanguage" nicht in der URL habe, der mehrere Werte enthält.

Die URL ist bspw. so aufgebaut:

http://localhost:51462/Company?filterForLanguage=DE%2CIT&excludeSalesAgents=True

Jemand eine Idee woran das liegt?!

L. G.
Steffo

15.08.2013 - 14:11 Uhr

@Abt: Danke, das sind gute Referenzen!!!

Ich werde mich dann mal damit beschäftigen!

L. G.
Steffo

15.08.2013 - 13:53 Uhr

Du redest aktuell von einer Autovervollständigung, wie es Google hat.
Diese Anfrage findet im Hintergrund über POST statt. Die Resultate werden anschließend in die aktuelle Seite eingebettet bzw. der Content ersetzt.

Nein, keine Autovervollständigung. Ich will keine Suchvorschläge sondern die Ergebnisse abrufen.
D. h., wenn jemand nach "Banane" sucht, sollen bspw. alle Bananenhändler angezeigt werden.

Ok, google macht das tatsächlich über POST! 😉

Wie stell ich das am Besten an? Die Seite bzw. ein DOM-Element soll automatisch refresht werden, wenn der Benutzer etwas sucht.
Soll ich da eine Teil-View erstellen, die lediglich die Ergebnisse rendert?

L. G.
Steffo

15.08.2013 - 13:38 Uhr

Über Post... Und wenn man Suchresultate als Link teilen will? Geht nicht über Post! Google macht das auch über GET!

15.08.2013 - 13:25 Uhr

Hallo,
ich würde gerne einer @Html.Textbox ein @Html.Action (oder ein Äquivalent) übergeben welche ausgeführt wird, sobald ein User anfängt zu tippen. Die Action ist eine Suchfunktion die in Echtzeit ausgeführt wird (Anforderung von meinem Chef) und Parameter über GET übergibt.
Nun könnte man das in Ajax machen, aber da bin ich nicht so fit und ich würde eine reine MVC-Lösung vorziehen.

Danke im Voraus!

L. G.
Steffo

PS: @Abt: Gute Nachrichten: Ich benutze vermehrt View-Models! 😉

09.08.2013 - 15:01 Uhr

Nö. ReadOnly bringt gar nichts.
Da packt sich einer FireFox, schaut die versteckten Felder an, ändert was, fertig.

Und ne, DateTime bringt Dir jQuery relativ wenig, da die Culture trotzdem anders sein kann.

Was spricht gegen Bind mit einer Whitelist?

L. G.
Steffo

08.08.2013 - 14:27 Uhr

Danke, werde das wohl über die URL machen! 😃

L. G.
Steffo

08.08.2013 - 14:22 Uhr

Hallo,
wie es aussieht, habe ich die API einfach falsch verwendet. So geht's:

<div class="editor-field">
        @Html.ListBox("Languages")
</div>

Ich habe den zweiten Parameter "ViewBag.Languages as MultiSelectList" einfach weg gelassen, da dort selektierte Werte erwartet werden und keine MultiSelectList-Instanz. Die selektierten Werte definiere ich ja schon im Controller, deswegen reicht es hier einfach nur den Key der ViewBag anzugeben.

Warum will ich nicht in Plain-HTML programmieren? Ich denke, wenn man das MVC-Framework erst mal richtig kennt, dann kann man damit effizienter arbeiten und der Code wird auch übersichtlicher. Es graust mir ein wenig in der View über Elemente zu iterieren. Das mache ich zwar vereinzelnd, aber eben nur dort, wo es nicht anders geht.
Ich möchte eure Kompetenzen sicherlich nicht Abrede stellen, sondern denke einfach nur, dass meine Herangehensweise einfach eine andere ist. Aber die Kritik bzgl. ViewModels akzeptiere ich voll und ganz und werde früher oder später wohl darauf zurückgreifen müssen.

Soweit vielen Dank für eure Hilfe!

L. G.
Steffo

08.08.2013 - 13:21 Uhr

Ich hätte schon Interesse daran zu wissen wo der Fehler liegt und weniger daran ein Breitband-Antibiotikum um die Ohren geschlagen zu bekommen, wo ich nicht weiß, ob ich den Fehler dann immer noch habe...

EDIT: Zumal SelectList nicht meine Anforderung abdeckt mehrere Einträge markieren zu können!

L. G.
Steffo

08.08.2013 - 12:08 Uhr

Ich habe meinen Code nun auf das Nötigste reduziert und es wird nun immer noch nichts vorselektiert. Wo kann der Fehler nur sein?!

List<Language> lLang = new List<Language> 
            { 
                new Language { Abbreviation = "DE", Name = "German" }, 
                new Language { Abbreviation = "IT", Name = "Italian" } 
            };

ViewBag.Languages = new MultiSelectList(lLang, "Abbreviation", "Name", new string[] { "DE", "IT" });

Edit.cshtml

<div class="editor-label">
        @Html.LabelFor(model => model.SpokenLanguages)
</div>
<div class="editor-field">
        @Html.ListBox("Languages", ViewBag.Languages as MultiSelectList)
</div>

Danke im Voraus!

L. G.
Steffo

08.08.2013 - 11:25 Uhr

Wie mache ich das dann mit der Culture?
Ich möchte da dynamisch sein, da die Webseite multilingual sein soll. D. h. jeder Besucher soll in seinem gewohnten Format Daten eingeben können.

L. G.
Steffo

08.08.2013 - 11:23 Uhr

Hallo,
ich habe ein unglaublich popliges Problem, dass ich mit der SelectList nicht habe!
Ich will in einer MultiSelectList einfach Einträge markieren!

Hier mein Code dazu:

private void PopulateFields(IEnumerable<int> selMembers = null, IEnumerable<string> selLang = null, IEnumerable<int> selLeaders = null)
        {
            List<int> mem = new List<int> { 1, 2 }; // Test mit Dummy!
            List<String> lang = new List<String> { "DE", "EN" }; // Test mit Dummy!

            ViewBag.Members = new MultiSelectList(db.LoginUsers, "PersonID", "FullName", mem);
            ViewBag.Languages = new MultiSelectList(db.Language, "Abbreviation", "Name", lang);
            ViewBag.Teamleaders = new MultiSelectList(db.Teamleader, "PersonID", "FullName", selLeaders);
        }

Damit ihr seht, dass die Values tatsächlich richtig sind, habe ich vom Firefox-CodeInspector für Language ein paar Options rauskopiert. Hier sollte bei "DE" z. B. ein "selected" stehen. Tut es aber nicht!

<select id="Languages" name="Languages" multiple="multiple">
    <option value="AF"> … </option>
    <option value="AR"> … </option>
    <option value="DA"> … </option>
    <option value="DE"> … </option>
</select>

Jemand eine Idee, weshalb das nicht klappt?

Danke im Voraus!

Liebe Grüße
Steffo

08.08.2013 - 11:13 Uhr

@Abt: ID: ReadOnly sollte Abhilfe schaffen, oder?
LocationName muss man vorher anlegen und werden dann in einer DropDownList angezeigt. Vorher muss man PLZ angeben und man kriegt dann alle LocationNames zu der PLZ. Zumindest ist das so geplant.

  • DateTime-Kultur: Muss man das nicht irgendwo im Frontend einstellen (JQuery)?

Ansonsten danke für deine Tipps. Werde mir dazu mal Gedanken machen, wenn ich fitter im Framework bin. 😉

Ich hab das Problem folgendermaßen gelöst (nicht schlagen X( ):

ModelState.Clear();
TryValidateModel(meeting);

L. G.
Steffo

07.08.2013 - 19:32 Uhr

Hi,
debuggen kann ich nicht viel. ModelState.IsValid ein einfaches Property.
Aber im Anhang findet ihr einen Dump meines Meeting-Objekts und es schaut mir gut aus.

Hier der Quellcode dazu:

public class Meeting
    {
        [Key]
        public int MeetingID { get; set; }

        [ForeignKey("Location"), Column(Order = 0)]
        public string LocationName { get; set; }

        [ForeignKey("Location"), Column(Order = 1)]
        [Display(Name = "Zip Code")]
        public string LocationZipCode { get; set; }

        [DataType(DataType.Date)]
        public DateTime Date { get; set; }

        [DataType(DataType.Time)]
        [Display(Name = "From")]
        public DateTime DateTimeFrom { get; set; }

        [DataType(DataType.Time)]
        [Display(Name = "To")]
        public DateTime DateTimeTo { get; set; }

        [ForeignKey("ContactWipe")]
        public int ContactWipeID { get; set; }

        public virtual ContactWipe ContactWipe { get; set; }
        public virtual ICollection<Person> Participants { get; set; }

        public virtual Location Location { get; set; }
        public virtual ICollection<Comment> Comments { get; set; }
    }

Liebe Grüße
Steffo

07.08.2013 - 15:12 Uhr

Hallo,
ich prüfe die Validierung von meinem Model nach einem HTTP-Post mit folgendem Standard-Code:

if (ModelState.IsValid) 
{
   //...
}

Nun schlägt die Validierung allerdings fehl, da ich wieder auf die Create-Seite weitergeleitet werde.
Nun würde ich gerne wissen, wo es genau fehlschlägt. Ich wollte das gerne mit ValidationSummary() verwenden, allerdings spielt es keine Rolle welche Parameter ich verwende, ich erhalte nie ein Fehler.
Folgendes habe ich schon ausprobiert:@Html.ValidationSummary()
@Html.ValidationSummary(false)
@Html.ValidationSummary(true) Das Witzige ist, wenn ich die Validierung ausschalte, wird alles(!) ordnungsgemäß gespeichert!

Weiß jemand weiter?!

Danke im Voraus!

L. G.
Steffo

05.08.2013 - 21:28 Uhr

Ich habs nun anders gelöst: Many to Many, d. h., sowohl Person als auch Meeting haben eine Collection des jeweils anderen Entitättyps. Eigentlich wollte ich genau zwei Instanzen von Person in Meeting haben, aber das schien Code First irgendwie zu verwirren...

Dennoch danke, für eure Antworten! 😃

L. G.
Steffo

03.08.2013 - 13:06 Uhr

Hallo M@TUK,
deswegen wollte ich ja Cascade Delete über die Fluent-API auf false setzen, aber das gelingt mir nur, wenn ich das direkt im Migrationsskript mache. Das Migrationsskript möchte ich aber jederzeit verwerfen und über Code First und der Fluent-API neu erstellen können.

Weißt du da vielleicht weiter?!

L. G.
Steffo

03.08.2013 - 00:01 Uhr

Hallo,
ich versuche mich gerade an Code First und stoße immer wieder auf Probleme...
Eine Person soll mehrere Meetings haben können und ein Meeting besteht aus genau zwei Personen:

    public abstract class Person
    {
        public int PersonID { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public virtual ICollection<Meeting> Meeting { get; set; }
    }
    public class Meeting
    {
        public int MeetingID { get; set; }

        [ForeignKey("Customer")]
        public int CustomerID { get; set; }

        [ForeignKey("SalesAgent")]
        public int SalesAgentID { get; set; }

        public virtual Person Customer { get; set; }
        public virtual Person SalesAgent { get; set; }
    }

Folgenden Fehler bekomme ich, wenn ich update-database in der Paket Manager-Konsole durchführe:

Fehlermeldung:
Introducing FOREIGN KEY constraint 'FK_dbo.Meeting_dbo.Person_SalesAgentID' on table 'Meeting' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.

Wenn ich nun nachträglich im Migrationsskript cascadeDelete auf false setze, ist alles gut:

            AddForeignKey("dbo.Meeting", "CustomerID", "dbo.Person", "PersonID", cascadeDelete: false);
            AddForeignKey("dbo.Meeting", "SalesAgentID", "dbo.Person", "PersonID", cascadeDelete: false);

Wenn ich diese aber wieder auf true setze und versuche das über den modelBuilder zu beheben...

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Meeting>().HasRequired(m => m.SalesAgent).WithMany(p => p.Meeting).WillCascadeOnDelete(false);
            modelBuilder.Entity<Meeting>().HasRequired(m => m.Customer).WithMany(p => p.Meeting).WillCascadeOnDelete(false);
        }

... dann bekomme ich folgende Fehlermeldung:> Fehlermeldung:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure(EdmEntityType entityType, EdmModel model)
bei System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntities(EdmModel model)
bei System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
bei System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
bei System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
bei System.Data.Entity.Internal.RetryLazy2.GetValue(TInput input) bei System.Data.Entity.Internal.LazyInternalContext.InitializeContext() bei System.Data.Entity.Internal.LazyInternalContext.get_CodeFirstModel() bei System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer) bei System.Data.Entity.Migrations.Extensions.DbContextExtensions.&lt;&gt;c__DisplayClass1.&lt;GetModel&gt;b__0(XmlWriter w) bei System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(Action1 writeXml)
bei System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(DbContext context)
bei System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext)
bei System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
bei System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator()
bei System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
bei System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()

Weiß jemand weiter?! Code First ist an sich eine geniale Idee, aber es kann nicht sein, dass etwas, dass in SQL total leicht umzusetzen ist, mit Code First solche doofen Probleme macht!!!

L. G.
Steffo