Ich betrachte den folgenden jQuery-Aufruf:
%Vor%Ich sehe dies als die "hartcodierte" Art, dies zu tun, im Vergleich zu:
%Vor%was ich als die nicht hart codierte Methode dafür sehe.
Könnte mir bitte jemand erklären, worum es geht? Scheint mir, beide Wege sind gleichermaßen hart codierte Möglichkeiten, dies zu nennen, weil Sie die expliziten Namen des Controllers und der Methode in beiden haben.
Weiß jemand, warum man hardcoded heißt und das andere nicht? Ist einer besser?
Wenn wir eine URL fest codieren, verlieren wir die Möglichkeit, unser Routing-Schema später zu ändern. Also immer verwenden URL Helper-Methoden. Wenn Sie den URL-Helper verwenden, kümmert sich die Helper-Methode um die Änderung. Sie müssen die Änderung nicht an 100 Stellen vornehmen. Außerdem müssen Sie sich keine Gedanken darüber machen, wie viele ../ ich als Präfix hinzufügen muss, wenn die gleiche Methode von einer Startseite und einer inneren Seite aufgerufen wird
Beantworte diese Antworten von Darin
"/ Home / GetResult" wird als "hart codiert" betrachtet, da der Entwickler einen Konfigurationswert direkt im Code eingegeben hat, wo es in der Zukunft schwieriger zu ändern ist.
Es ist noch schlimmer, URL-Werte speziell zu codieren, weil "/ Home / GetResult" unterbrochen wird, wenn diese Ansicht (und die zugeordnete Controller-Aktion) in einen anderen "Bereich" innerhalb der Anwendung verschoben wird. Die @ Url.Action-Methode ist besser, weil nicht.
Ich mag Peter Js Antwort . Außerdem
Sie sollten die URL als Teil der href oder als Attribut für ein html-Element haben.
%Vor%Und dann
%Vor%Wickeln Sie das Obige in eine Funktion und verknüpfen Sie es über den Attributnamen mit einem Klickereignis.
Um Ihre Frage einfach zu beantworten, ja, ich betrachte beide Beispiele, die Sie aufgelistet haben, als "hardcoded". Die zweite, @ Url.Action ist WENIGER hart-codiert . Es hat weniger Spezifität impliziert. Wenn Sie den Stamm Ihres Projekts geändert haben, würde der zweite noch funktionieren, während der erste wie von @Peter J erwähnt unterbrochen würde. Außerdem würde der zweite funktionieren, wenn Sie Bereiche verwenden und den Bereichsnamen ändern, während der erste würde brechen.
Um vielleicht etwas hilfreicher zu sein, benutze ich einen dritten Ansatz. Ich hatte vor einem Monat genau Ihre Frage und danke ASP.NET MVC AJAX Anrufe ohne statische Controller URLs (magische Zeichenfolgen) Ich habe einen Prozess, der wirklich gut für mich funktioniert.
Index.cshtml
%Vor%main.js
%Vor%Voila! Kompilierzeitprüfung und klare Trennung der Verantwortlichkeit über T4MVC- und HTML5-Datenattribute. Die Controller-Definition wird aus dem Widget gelesen, das sie verwendet. Hervorragend für Teilansichten, die möglicherweise mehrmals auf einer Seite angezeigt werden.
Ich empfehle dringend T4MVC, das ist die "Mvc". Syntax sehen Sie in der Beispielansicht. Wenn Sie versuchen, "hart codieren" zu vermeiden, ist das ungefähr so dynamisch, wie Sie dafür bekommen können. Ich benutze T4MVC ( Ссылка ), damit ich "magische Zeichenfolgen" vermeiden kann, die sich auf Controller und Aktionen in meinen Ansichten beziehen. T4MVC ist nicht perfekt, aber es ist eine große Verbesserung. Innerhalb von versteckten T4MVC-Dateien gibt es immer noch fest codierte Werte, aber Sie sehen sie nie, sie werden automatisch von Ihren Controllern generiert und die Kompilierungszeit wird überprüft.
Wie bereits von @Valamas vorgeschlagen, verwende ich dann Datenattribute für HTML-Elemente, um diese URLs von meinen Ansichten an Javascript weiterzuleiten.
Ich verwende diesen Datenattributansatz besonders, wenn ich auf meiner Seite AJAX-Aufrufe habe. Eine einzelne Seite kann leicht 10 URL-Abhängigkeiten haben, und es ist schwer zu erkennen, wenn die Links durch Benutzertests unterbrochen werden, die die bedingten Features möglicherweise nicht vollständig abdecken. Aber, hurra! T4MVC löst Kompilierungsfehler aus, wenn die Verknüpfungen nicht vorhanden sind. Wenn Ihr Code mit allen Datenattributprüfungen in init organisiert ist, löst javascript Ladezeitfehler aus, wenn die entsprechenden Datenattribute fehlen (und nicht die Laufzeitfehler) Sie würden für undefinierte Variablen erhalten). Dies bietet eine viel frühere / einfachere Erkennung von Verbindungsfehlern, selbst wenn Sie Ihr JavaScript nicht in der Unit testen (und ich nicht).
Ich habe normalerweise eine Standard-Kopfzeile auf jeder Seite, die die aktuellen global nützlichen Informationen (z. B. UserId) als Datenattribute auf dem BODY-Element oder auf einem Display enthält: keine SPAN mit einer bekannten ID.
Dann lade ich normalerweise alle Daten von Attributen an einem einzigen Ort nahe dem oberen Rand meines Javascript-Codes (oder jeder Javascript-Datei, die sie benötigt).
Was bringt das? Jetzt haben Sie einen einzigen Ort, an dem Sie sicherstellen können, dass alle erforderlichen Parameter für eingebettete Daten Ihrem Javascript zur Verfügung gestellt werden. Ihr JavaScript verweist nicht auf Variablen, die nicht definiert sind. Wenn Sie also eine JavaScript-IDE verwenden, erhalten Sie keine falschen Fehler. Entwickler, die dein Javascript betrachten, kratzen nicht ihre Köpfe, die versuchen, die Erklärung der Geheimnisvariablen in anderen Javascriptakten zu finden; besonders problematisch, wenn sie nicht auch ASP.NET MVC-Entwickler sind. Wenn Sie über separate Sprachteams verfügen, sind die Verantwortlichkeiten für die Implementierung klarer (Ihre JavaScript-Entwickler bearbeiten Ihre Ansichten nicht, wenn sie die Namenskonventionen oder die umgekehrte Reihenfolge ändern). Außerdem werden Variablen zu einem bekannten Zeitpunkt während des Client-Seiten-Lebenszyklus definiert, was ein großer Vorteil für das Debugging von Javascript ist. Und Ihre Ansicht enthält kein Javascript, das über die gesamte Seite verteilt ist, wobei ein kleiner HTML-Fehler in der Mitte der Seite möglicherweise zu einem vollständigen JavaScript-Fehler führt.
Außerdem ist dies, wie im Beispiel gezeigt, die einzige Möglichkeit, für Teilansichten zu fliegen, die mehr als einmal auf der Seite vorkommen können. Sie können die eingebetteten Daten eindeutig dem einzelnen HTML-Widget zuordnen, das sie verwendet. Wenn Sie JavaScript direkt in die Ansicht einfügten, würden Sie fälschlicherweise Variablen neu definieren.
Die Liste der Vorteile geht weiter und weiter, aber im Grunde geht es um eine Trennung der Verantwortung. Alles andere ergibt sich daraus.
Sie würden dasselbe erreichen, am meisten der Zeit.
Wenn Sie im Grunde eine einfache MVC-Site ohne Bereiche haben und die Standard-Routendefinition verwenden, werden Sie kaum Änderungen bemerken. Wenn Sie jedoch die Routendefinition anpassen oder Bereiche in Ihrer App verwenden, werden Sie wahrscheinlich auf Probleme stoßen. Wo es möglich ist, wird empfohlen, die softcodierte Methode zu verwenden. Dies wird problematisch, wenn Sie die URLs in eine JavaScript-Datei einbetten müssen. In diesem Fall weist es jedoch in der Regel auf ein Problem mit Ihrer Implementierung hin, und der Code in Ihren JS-Dateien sollte die URL akzeptieren, die als Parameter verwendet wird, anstatt sie in Ihre externen JS-Dateien einzubetten.
Tags und Links asp.net-mvc jquery razor