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 werdenhttp://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:
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) –
@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
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) –