2017-10-05 5 views
0

Ich habe URL-Problem bei der Suche auf der Seite. So habe ich Index-Ansicht mit einem Jahr Textbox und einer Suchtaste innerhalb eines Formulars GET-Methodeasp.net mvc Route mit Formular mit 2 Aktion und die gleiche Ansicht

Index.cshtml

@using (Html.BeginForm("Search", "Service", new { Year = Model.Year }, FormMethod.Get)) 
{ 
    <p> 
     <div class="form-inline"> 
      @Html.EditorFor(model => model.Year, new { htmlAttributes = new { @class = "form-control", @placeholder = "Enter Year" } }) 
      <button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-search"></span> Search</button> 
     </div> 
    </p> 
} 

Gesuche gestellt als actionName in BeginForm, weil, wenn Umleitung/Index zum Service des Service Daten sollten nicht zum ersten Mal geladen werden. Also, ich benutze eine andere Aktion, "Suche", um diese Anfrage zu bearbeiten, wenn der Benutzer das Jahr nicht eingibt, dann werden alle Daten geladen, aber wenn der Benutzer das Jahr eingibt, lädt er die Daten auf der Basis Jahr.

Hier ist der Controller die Anfrage

ServiceController.cs

public ActionResult Index() 
{ 
    var vm = new ServiceIndexViewModel(); 
    return View(vm); 
} 

public async Task<ActionResult> Search(int? year) 
{ 
    var vm = new ServiceIndexViewModel(); 

    if (ModelState.IsValid) 
    { 
     var list = await service.Search(year); 
     vm.Services = AutoMapper.Mapper.Map<IEnumerable<ServiceListViewModel>>(list); 
    } 

    return View("Index", vm); 
} 

und die individuelle Route zu handhaben, die Routing-

RouteConfig.cs

routes.MapRoute(
    "ServiceSearch", 
    "Service/Search/{Year}", 
    new { controller = "Service", action = "Search", Year = UrlParameter.Optional } 
); 

// default route 
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Company", action = "Index", id = UrlParameter.Optional } 

) zu handhaben;

aber ich habe die URL wie diese bekommen:

http://localhost:18132/Service/Search?Year= oder http://localhost:18132/Service/Search?Year=2017

und ich möchte die URL wie diese

angezeigt werden

http://localhost:18132/Service/Search oder http://localhost:18132/Service/Search/Year/2017

Was mit falsch ist mein Routing? Wie löst man das?

routes.MapRoute(
    "ServiceSearch", 
    "Service/Search/Year/{Year}", 
    new { controller = "Service", action = "Search", Year = UrlParameter.Optional }); 

Aber das Problem ist etwas anderes Ihr Code ist nicht auf diese definierte Strecke fallen und es fällt auf die Standardroute:

+1

Das Hinzufügen von 'new {Year = Model.Year}' als Routenparameter ist sinnlos, da es der Wert der Eingabe ist, die gebunden wird. Sie senden ein Formular an eine GET-Methode, was bedeutet, dass der Wert der Eingabe immer nur als Abfragezeichenfolgewert hinzugefügt wird (der Browser weiß nichts über Ihre serverseitigen Routendefinitionen.) Aber Sie könnten Javascript verwenden, um die URL zu erstellen Verwenden Sie 'location.href = ..' (und brechen Sie das Formular absenden) –

+0

@StephenMuecke yeah Sie haben Recht, aber ich habe diesen Code von dieser Website https://stackoverflow.com/questions/28176634/mvc-asp- net-map-routing-ist-nicht-arbeiten-mit-form-get-request.Es hat das gleiche Problem, aber warum kann er es machen und ich nicht? Was ist der Unterschied? – Willy

+0

Die akzeptierte Antwort in dieser Frage hat keine Eingaben - es hat nur die fest codierten Werte für die Routenparameter zurückgestellt (und das OP hatte nur verborgene Eingaben, so dass ein Formular sowieso nur Unsinn war) –

Antwort

0

allererst Ihre Route sollte wie folgt definiert werden. Stellen Sie sicher, dass die Standardroute unter dieser Route ist, wenn es immer noch nicht funktioniert, kommentieren Sie mich hier und ich werde Ihnen sagen, was ich in meinem Kopf habe.

+0

Ich habe das Routing ersetzt und hier ist das Ergebnis http: // localhost: 18132/Service/Suche/Jahr? Jahr = wenn ich kein Jahr und http: // localhost eingeben: 18132/Service/Suche/Jahr ? Jahr = 2017 wenn ich ein Jahr eintippe – Willy

Verwandte Themen