2016-09-09 6 views
0

Ich arbeite mit einem MVC und versuche, ein Datum über meine URL zu übergeben. Ich möchte, dass die Methode standardmäßig auf das aktuelle Datum verweist, wenn in der URL kein Datum angegeben ist.Nicht sicher, warum meine Variable übertreibt

public ActionResult Date(string date) 
    { 
     DateTime searchDate = DateTime.Now.Date; 
     bool success = false; 

     if(date != null) 
     { 
      success = DateTime.TryParseExact(date, "MM-dd-yyyy", System.Globalization.CultureInfo.CurrentCulture, 
         System.Globalization.DateTimeStyles.AllowWhiteSpaces, out searchDate); 
     } 

     List<Article> articles = new List<Article>(); 

     foreach (Article a in db.Articles) 
     { 
      if (a.PostedDateTSU.Value.Day == searchDate.Day && a.PostedDateTSU.Value.Month == searchDate.Month && 
       a.PostedDateTSU.Value.Year == searchDate.Year) 
      { 
       articles.Add(a); 
      } 
     } 
     return View(articles); 
    } 

Mein Problem ist, wenn ich die URL eingeben: „http://localhost:52159/Articles/Date/09-08-2016“ das Verfahren noch auf dem heutigen Datum in Verzug. Nicht sicher, wo es falsch läuft. Ich habe das Gefühl, dass es mit TryParseExact() zu tun hat.

Vielen Dank im Voraus!

+0

Was ist der Wert von‚Erfolg‘ist danach Setzen Sie ein wenig Debug-Punkt oder eine Nachricht dort, um zu sehen, ob es sogar TryParseExact() erreicht. – WBT

+2

Wenn es ein Datum ist, warum verwenden Sie 'string' anstelle von' DateTime'? –

+0

@StephenMuecke Ich glaube nicht, dass ich ein realisierbares DateTime Format über URL ohne zusätzliches übergeben könnte Parsing. Könnte ich? –

Antwort

1

Sie benötigen Parameter oder den Zugriff auf die Aktion Strecke wie dieser http://localhost:52159/Articles/Date?date=09-08-2016 "

Beispiel in RouteConfig:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "DateRoute", 
      url: "{controller}/{action}/{date}", 
      defaults: new { controller = "YourController", action = "Date", date = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

    } 
+0

Das wird nicht funktionieren (alles wird jetzt mit der DateRoute übereinstimmen und die Standardroute wird nie getroffen werden). Die DateRoute muss "URL" sein: "Artikel/Datum/{Datum}", "und" defaults: new {controller = "Artikel", action = "Datum"} ' –

Verwandte Themen