Wie bindet man eine Ansichtsmodelleigenschaft mit einem anderen Namen?

Gibt es eine Möglichkeit, eine Reflektion für eine Ansichtsmodelleigenschaft als Element mit unterschiedlichen Namen und ID-Werten auf der HTML-Seite vorzunehmen.

Das ist die Hauptfrage, was ich erreichen will. Die grundlegende Einführung für die Frage lautet also:

1- Ich habe ein Ansichtsmodell (als Beispiel), das für eine Filteroperation in der Ansichtsseite erstellt wurde.

public class FilterViewModel
{
    public string FilterParameter { get; set; }
}

2- Ich habe eine Controller-Aktion, die zum Abrufen von Formularwerten erstellt wird (hier ist es Filter)

public ActionResult Index(FilterViewModel filter)
{
return View();
}

3- Ich bin der Ansicht, dass ein Benutzer einige Daten filtern und Parameter per Abfrage über das Formular Submit senden kann.

@using (Html.BeginForm("Index", "Demo", FormMethod.Get))
{    
    @Html.LabelFor(model => model.FilterParameter)
    @Html.EditorFor(model => model.FilterParameter)
    <input type="submit" value="Do Filter" />
}

4- Und was ich in der Ausgabe der gerenderten Ansicht sehen möchte, ist

<form action="/Demo" method="get">
    <label for="fp">FilterParameter</label>
    <input id="fp" name="fp" type="text" />
    <input type="submit" value="Do Filter" />
</form>

5- Als Lösung möchte ich mein Ansichtsmodell folgendermaßen ändern:

public class FilterViewModel
{
    [BindParameter("fp")]
    [BindParameter("filter")] // this one extra alias
    [BindParameter("param")] //this one extra alias
    public string FilterParameter { get; set; }
}

Die grundlegende Frage betrifft also BindAttribute, aber die Verwendung komplexer Typeneigenschaften. Aber auch wenn es eine eingebaute Methode gibt, ist dies viel besser. Eingebaute Vorteile:

1- Verwendung mit TextBoxFor, EditorFor, LabelFor und anderen stark typisierten Ansichtsmodell-Hilfsprogrammen können einander besser verstehen und miteinander kommunizieren.

2- URL-Routing-Unterstützung

3- Kein Framework durch Desing Probleme:

Im Allgemeinen wird empfohlen, dass Benutzer keine benutzerdefinierten Modellbinder schreiben, da diese nur schwer zu finden sind und nur selten benötigt werden. Das Problem, das ich in diesem Beitrag diskutiere, ist möglicherweise einer der Fälle, in denen dies gerechtfertigt ist.

Link des Zitats

Und auch nach einigen Recherchen habe ich diese nützlichen Werke gefunden:

Bindungsmodelleigenschaft mit unterschiedlichem Namen

Ein Upgrade des ersten Links in einem Schritt

Hier ein informativer Leitfaden

Fazit: Aber keiner von ihnen gibt mir meine Probleme genau zu lösen. Ich suche eine stark typisierte Lösung für dieses Problem. Wenn Sie einen anderen Weg kennen, teilen Sie uns dies bitte mit.

Aktualisieren

Die zugrunde liegenden Gründe, warum ich dies tun möchte, sind im Grunde:

1- Jedes Mal, wenn ich den Namen des HTML-Steuerelements ändern möchte, muss ich PropertyName beim Kompilieren ändern. (Es gibt einen Unterschied zwischen dem Ändern eines Eigenschaftsnamens und dem Ändern einer Zeichenfolge im Code.)

2- Ich möchte reale Eigenschaftsnamen vor Endbenutzern verbergen (tarnen). Die meisten View Model-Eigenschaftsnamen stimmen mit den zugeordneten Entity Objects-Eigenschaftsnamen überein. (Aus Gründen der Entwicklerlesbarkeit)

3- Ich möchte die Lesbarkeit für Entwickler nicht entfernen. Denken Sie an viele Eigenschaften mit einer Länge von 2-3 Zeichen und einer Mo-Bedeutung.

4- Es sind viele Ansichtsmodelle geschrieben. Das Ändern ihrer Namen wird also mehr Zeit in Anspruch nehmen als diese Lösung.

5- Dies wird eine bessere Lösung sein (in meinem POV) als andere, die in anderen Fragen bis jetzt beschrieben wurden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage