Frage

Ich verwenden Sie ein anonymes Objekt, um an meinem Html-Attribute, um einige Hilfsmethoden.Wenn die Verbraucher nicht ein ID-Attribut, möchte ich hinzufügen, dass es in meinem Helfer-Methode.

Wie kann ich ein Attribut hinzuzufügen, um das anonyme Objekt?

War es hilfreich?

Lösung

Wenn Sie versuchen, verlängern Sie diese Methode:

public static MvcHtmlString ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues);

Obwohl ich sicher bin, Khaja Objekt-Erweiterungen funktionieren würde, könnten Sie erhalten eine bessere Leistung, durch die Schaffung einer RouteValueDictionary und übergeben die routeValues-Objekt, fügen Sie Ihre zusätzliche Parameter aus dem Kontext, dann wieder mit der ActionLink überlast, die es braucht, RouteValueDictionary statt ein Objekt:

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);
    }

Andere Tipps

Die folgende Erweiterung Klasse würde man bekommt, was man braucht.

public static class ObjectExtensions
{
    public static IDictionary<string, object> AddProperty(this object obj, string name, object value)
    {
        var dictionary = obj.ToDictionary();
        dictionary.Add(name, value);
        return dictionary;
    }

    // helper
    public static IDictionary<string, object> ToDictionary(this object obj)
    {
        IDictionary<string, object> result = new Dictionary<string, object>();
        PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(obj);
        foreach (PropertyDescriptor property in properties){
            result.Add(property.Name, property.GetValue(obj));
        }
        return result;
    }
}

Ich nehme an, Sie anonyme Typen bedeuten hier, z.B. Wenn new { Name1=value1, Name2=value2} usw. so, bist du kein Glück - anonyme Typen sind normale Typen, dass sie fixiert sind, kompilierten Code. Sie passieren nur automatisch generiert werden.

Was Sie könnte zu tun ist new { old.Name1, old.Name2, ID=myId } schreiben, aber ich weiß nicht, ob das ist wirklich das, was Sie wollen. Einige weitere Informationen über die Lage (einschließlich Codebeispiele) wäre ideal.

Alternativ können Sie ein Container-Objekt erstellen, die immer hatte eine ID und was anderes Objekt den Rest der Eigenschaften enthalten ist.

public static string TextBox(this HtmlHelper html, string value, string labelText, string textBoxId, object textBoxHtmlAttributes, object labelHtmlAttributes){}

Dies würde die ID-Wert der Textbox akzeptieren sollte und sollte das Etikett beziehen. Wenn die Verbraucher jetzt nicht die „id“ Eigenschaft in dem textBoxHtmlAttributes umfassen wird das Verfahren ein falsches Etikett erstellen.

Ich kann durch die Reflexion prüfen, ob dieses Attribut in dem labelHtmlAttributes hinzugefügt wird, widersprechen. Wenn ja, dann will ich es hinzufügen oder ein neues anonymes Objekt erstellen, die es hinzugefügt. Aber da kann ich keinen neuen anonymen Typ zu Fuß durch die alten Attribute und das Hinzufügen meiner eigenen Attribut „id“ schaffen, ich bin ein bisschen fest.

Ein Behälter mit einer stark ID-Eigenschaft eingegeben und dann ein anonyme typisierten „Attribute“ das Objekt Code umschreibt erfordern, die die „fügen Sie ein ID-Feld“ Anforderung nicht abwägen.

Hoffen, dass diese Reaktion verständlich ist. Es ist das Ende des Tages, kann nicht mehr mein Gehirn in Linie erhalten ..

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top