Beiträge mit tag "lösung

C#4.0 – Problematik bei Default Values

2

Golo Roden erwähnte es bereits in den Kommentaren, daher möchte ich noch mal genauer darauf eingehen.
Dazu erstelle ich eine Solution in Visual Studio 2010 mit einer Konsolenapplikation, welche ich “DefaultValues” nenne. (weiterlesen …)

Linq und string.Contains() – Problem

0

Ich hatte eine kleine Methode, um mir bestimmte Datensätze aus einer Datenbank zu holen. Dazu nutze ich Linq, da es schön einfach ist.

        public IEnumerable<Data> Search(string filter)
        {
            var dataSet = from data in this.bigDataSet
                          where data.Name.Contains(filter)
                          select data;

            return dataSet;
        }

Über die Variable “filter” wollte ich die Daten eingrenzen. Allerdings sollte es auch möglich sein, sich alle Datensätze anzusehen. In der MSDN zu string.Contains() lautet es:

Rückgabewert
true, wenn der value-Parameter in dieser Zeichenfolge vorkommt oder value eine leere Zeichenfolge (“”) ist, andernfalls false.

Heißt für mich, dass ich “filter” leer lassen kann und so alle Datensätze bekomme. Funktionierte aber nicht. Ich vermute mal, es liegt daran, dass ich Linq-to-Ent verwende. Das Workaround funktioniert aber ganz gut:

        public IEnumerable<Data> Search(string filter)
        {
            var dataSet = from data in this.bigDataSet
                          where (!string.IsNullOrEmpty(filter) ? data.Name.Contains(filter) : true)
                          select data;

            return dataSet;
        }

Vielleicht hat ja jemand genauere Informationen, warum der erste Ansatz nicht funktioniert. Auf Anhieb habe ich nichts gefunden.

Html.Textbox und Ajax.BeginForm

0

So langsam sammel ich meine Erfahrung mit ASP.NET MVC, gute sowie schlechte.
Da kommen wir mal zu meinem heutigen Problem. Ich habe ein Formular, welches ich per Ajax an den Server senden möchte, dieser überprüft die Daten und gibt bei Bedarf ein Zusammenfassung der Fehler aus, wobei das Formular ausgefüllt bleibt.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyModel>" %>
<%= Html.ValidationSummary(); %>
<% using(Ajax.BeginForm("MyAction", new AjaxOptions { UpdateTargetId = "fromDiv" })) { %>
Benutzername: <%= Html.Textbox("username", Model.Username) %>
<input type="submit" value="Absenden" />
<% } %>

Hier mal als Beispiel. Das ganze wurde dann an den Server gesendet, validiert und bei Bedarf halt mit Fehlermeldung noch mal ausgegeben.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyAction(string username) {
   if(this.UsernameExists(username)) {
      this.ModelState.AddModelError("errorUsername","Benutzername existiert schon!");
      MyModel user = new MyModel { Username = username + "1" };
      return PartialView("MyControl", user);
   }
   //...
}

So, angenommen wir geben nun einen Benutzername ein, welcher schon existiert. Dann sollte nun das Formular erscheinen, oben die ValidationSummery und als Benutzername vorgeblendet der von eben + 1. Möge man meinen, ist aber nicht so. Es erscheint zwar die ValidationSummary aber nicht die 1 hinter dem Namen.
Ich hab das gute Teil rauf und runter debugt, in div. Browsern, bei allen das selbe Ergebnis. Im Model steht der richtige Wert, er wird aber nicht angezeigt.
Eine Erklärung konnte ich nicht finden, aber eine Lösung.

Das Problem liegt an Html.Textbox(). Es scheint, als ob er das Objekt im Cache vorhält. Da werden ganz böse Erinnerungen an ViewState wach. Lösen konnte ich das Problem, in dem ich die Textbox manuell erstelle:

Benutzername: <input type="text" name="username" value="<%= Html.Encode(Model.Username) %/>" />

Aber auf so etwas muss man erstmal kommen. Löst ja eigentlich nicht das Problem sondern nur umgangen. Vielleicht find ich ja noch mal einen Beitrag dazu in der MSDN oder jemand hinterlässt mir einen schönen Link in den Kommentaren.

Professor Layton und die Schatulle der Pandora

6

Falls jemand die Kamera zusammenbauen muss, hier die Lösung..
Professor Layton und die Schatulle der Pandora - Kamera

Trackbackreparatur

0

Wie bereits berichtet hab ich lauter Probleme gehabt mit den Trackbacks.
Nun habe ich es hinbekommen. Ich vermute, dass es was mit der Datenbankkonvertierung in UTF-8 zu tun hatte.
Und zwar wollte ich mir alle Beiträge anzeigen lassen, die noch Pings offen haben:
SELECT *
FROM wp_posts
WHERE to_ping != ''
AND post_status != 'draft'
(via WordPress Forum)
Obwohl das Feld “to_ping” auf ungleich leer gefiltert wird, wurden ein paar Beiträge mit leeren Feldern angezeigt. Für mich heißt das, dass dort irgendwelche unsichtbaren Zeichen oder Steuerungszeichen oder sonst was sein muss. Also die alle manuell auf leer gesetzt, den Cron von WP manuell ausgeführt und zack hat der mit Trackbacks um sich geschmissen.
Eingehende Trackbacks scheinen auch ohne Probleme zu funktionieren, könnt ihr gerne mal testen. Nur interne Trackbacks scheinen noch nicht zu funktionieren, da bin ich aber dran!

Sauber

nach oben