Wie kann ich einen String-Wert für "asp-for" in asp net 5 übergeben?

Ich möchte eine Edit.cshtml-Datei für eine Entität mit vielen zu bearbeitenden Eigenschaften schreiben, daher muss ich die folgenden Codes mehrmals schreiben:

<div class="form-group">
    <label asp-for="Email" class="col-md-2 control-label"></label>
    <div class="col-md-10">
        <input asp-for="Email" class="form-control" />
        <span asp-validation-for="Email" class="text-danger"></span>
    </div>
</div>

Eigentlich gibt es viele Entitäten, so dass ich viele Edit.cshtml-Dateien schreiben muss. Ich möchte einige Vereinfachungen vornehmen

Ich möchte einige Eigenschaften der Entität im Controller auswählen und mithilfe der Schleife die Eigenschaften in der Ansicht anzeigen. Zum Beispiel: In der Controller-Datei:

public IActionResult Edit(string id)
{
    var model = GetModel(id);
    var propertyNames= new List<string>()
    {
        "Name",
        "Email"
        // add some other property names of the entity 
    };
    ViewData["PropertyList"] = propertyNames;
    return View(model);
}

In der Ansichtsdatei:

@{
    var propertyNames = (List<string>)ViewData["PropertyList"];
    foreach (string item in propertyNames)
    {
        <div class="form-group">
            <label asp-for="@(item)" class="col-md-2 control-label"></label>
            <div class="col-md-3,">
                <input asp-for="@(item)" class="form-control" />
                <span asp-validation-for="@(item)" class="text-danger"></span>
            </div>          
        </div>
    }
}

aber es kann nicht funktionieren, da es falsche Codes erzeugt. Es scheint, dass ich keinen Zeichenfolgenwert für den Tag-Helfer "asp-for" übergeben kann.

Zum Beispiel, wenn ich den Code von top in diesen ändere:

@{
    string e = "Email";
    <div class="form-group">
        <label asp-for="@e" class="col-md-2 control-label"></label>
        <div class="col-md-10">
            <input asp-for="@e" class="form-control" />
            <span asp-validation-for="@e" class="text-danger"></span>
        </div>
    </div>
}

Der obige Code generiert Folgendes:

<div class="form-group">
    <label class="col-md-2 control-label" for="e">e</label>
    <div class="col-md-10">
        <input class="form-control" type="text" id="e" name="e" value="Email" />
        <span class="text-danger field-validation-valid" data-valmsg-for="e" data-valmsg-replace="true"></span>
    </div>
</div>

Der erwartete Code lautet:

<div class="form-group">
    <label class="col-md-2 control-label" for="Email">Email</label>
    <div class="col-md-10">
        <input class="form-control" type="email" data-val="true" data-val-email="Email &#x5B57;&#x6BB5;&#x4E0D;&#x662F;&#x6709;&#x6548;&#x7684;&#x7535;&#x5B50;&#x90AE;&#x4EF6;&#x5730;&#x5740;&#x3002;" data-val-required="Email &#x5B57;&#x6BB5;&#x662F;&#x5FC5;&#x9700;&#x7684;&#x3002;" id="Email" name="Email" value="" />
        <span class="text-danger field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span>
    </div>
</div>

Wie soll ich es machen

Ist es mit dem Rasiermesser möglich?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage