2009-04-03 3 views
1

den folgenden Code Gegeben:Passing Objekte als Parameter Methoden in ASP.NET-MVC von Desktop-Client zu Action

using (var client = new WebClient()) 
    { 
    string url = string.Concat(someUrl, "SomeControllerName/", currentId, "/WriteLogFile"); 
    var toWrite = DateTime.Now 

    /* Code to post object to URL goes here e.g. client.UploadValues(url, someNameValueCollectionObject)*/ 
    } 

Und die Controller-Methode Unterschrift:

public ActionResult WriteLogFile(DateTime date, int id) 

Wie kann ich den ersten Teil machen des Codes übergeben Sie das DateTime-Objekt an diese ActionResult-Methode?

Antwort

0

einen Abfrage-String-Parameter hinzufügen:

var toWrite = DateTime.Now; 
string url = string.Concat(someUrl, "SomeControllerName/", currentId, "/WriteLogFile"); 
url = string.Concat(url, "?date=", toWrite.ToString("s")); 
+0

Das ist die Lösung, die ich derzeit im Moment habe. Ich konvertiere jedes Objekt in seine String-Darstellung. – Draco

+1

Nun, egal, was Sie in eine String-Darstellung konvertieren müssen, da Sie eine HTTP-Anfrage machen. Wenn Sie keine Route mit einem "date" -Parameter haben, müssen Sie den QueryString verwenden, wie Craig es vorschlägt. –

+0

Nun, das ist der einzige Weg, es zu tun. Http ist Klartext: http://blogs.teamb.com/craigstuntz/2009/02/16/38024/ Abfragezeichenfolgen sind Text. Formularfelder sind Text. Alles, was Sie in einer GET-Anfrage an den Server übergeben können, ist Text. –

1

Sie das Format-String in für das Datum an den entsprechenden Controller

string url = string.Format("someUrl/SomeControllerName/WriteLogFile/{0}/{1}", currentId, DateTime.Now.ToString("MM-dd-yyyy")); 

und fügen Sie einen Eintrag in die Routen-Tabelle zu routen können und Aktion

routes.MapRoute("SomeRoutename", 
       "SomeControllerName/WriteLogFile/{id}/{date}", 
       new { controller = "SomeControllerName", action = "WriteLogFile", 
         date= DateTime.Now});