Wenn Sie versuchen, diese Methode zu erweitern:
public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues);
Obwohl ich sicher bin, dass die Objekterweiterungen von Khaja funktionieren würden, können Sie eine bessere Leistung erzielen, indem Sie ein RouteValueDictionary erstellen und das routeValues-Objekt übergeben, Ihre zusätzlichen Parameter aus dem Kontext hinzufügen und dann mithilfe der ActionLink-Überladung zurückkehren, die ein RouteValueDictionary anstelle eines Objekts verwendet:
Dies sollte den Trick tun:
public static MvcHtmlString MyLink(this HtmlHelper helper, string linkText, string actionName, object routeValues)
{
RouteValueDictionary routeValueDictionary = new RouteValueDictionary(routeValues);
// Add more parameters
foreach (string parameter in helper.ViewContext.RequestContext.HttpContext.Request.QueryString.AllKeys)
{
routeValueDictionary.Add(parameter, helper.ViewContext.RequestContext.HttpContext.Request.QueryString[parameter]);
}
return helper.ActionLink(linkText, actionName, routeValueDictionary);
}
Mit der folgenden Erweiterungsklasse erhalten Sie das, was Sie benötigen.
quelle
Ich nehme an, Sie meinen hier anonyme Typen, z
new { Name1=value1, Name2=value2}
. B. usw. Wenn ja, haben Sie kein Glück - anonyme Typen sind normale Typen, da es sich um festen, kompilierten Code handelt. Sie werden einfach automatisch generiert.Sie könnten schreiben,
new { old.Name1, old.Name2, ID=myId }
aber ich weiß nicht, ob Sie das wirklich wollen. Einige weitere Details zur Situation (einschließlich Codebeispiele) wären ideal.Alternativ können Sie ein Containerobjekt erstellen, das immer eine ID hatte, und jedes andere Objekt, das den Rest der Eigenschaften enthielt.
quelle
Dies würde den ID-Wert akzeptieren, den das Textfeld haben sollte und auf den sich die Bezeichnung beziehen sollte. Wenn der Verbraucher die Eigenschaft "id" jetzt nicht in die textBoxHtmlAttributes einfügt, erstellt die Methode eine falsche Bezeichnung.
Ich kann durch Reflektion überprüfen, ob dieses Attribut im labelHtmlAttributes-Objekt hinzugefügt wurde. Wenn ja, möchte ich es hinzufügen oder ein neues anonymes Objekt erstellen, dem es hinzugefügt wurde. Aber weil ich keinen neuen anonymen Typ erstellen kann, indem ich durch die alten Attribute gehe und mein eigenes "id" -Attribut hinzufüge, stecke ich irgendwie fest.
Ein Container mit einer stark typisierten ID-Eigenschaft und einer anonym getippten "Attribute" -Eigenschaft würde Code-Umschreibungen erfordern, die nicht der Anforderung "ID-Feld hinzufügen" entsprechen.
Hoffe diese Antwort ist verständlich. Es ist das Ende des Tages, ich kann mein Gehirn nicht mehr in Einklang bringen.
quelle