ich einen benutzerdefinierten Helfer muß fusionieren, wo ich ein Htmlattributes als Parameter erhalten:Wie Htmlattributes in der kundenspezifischen Helper
public static MvcHtmlString Campo<TModel, TValue>(
this HtmlHelper<TModel> helper,
Expression<Func<TModel, TValue>> expression,
dynamic htmlAttributes = null)
{
var attr = MergeAnonymous(new { @class = "form-control"}, htmlAttributes);
var editor = helper.EditorFor(expression, new { htmlAttributes = attr });
...
}
Die MergeAnonymous Verfahren den fusioniert Htmlattributes erhielten in Parameter mit „neuer {@ Klasse =“ return muss Form -control "}":
static dynamic MergeAnonymous(dynamic obj1, dynamic obj2)
{
var dict1 = new RouteValueDictionary(obj1);
if (obj2 != null)
{
var dict2 = new RouteValueDictionary(obj2);
foreach (var pair in dict2)
{
dict1[pair.Key] = pair.Value;
}
}
return dict1;
}
Und im Editor-Vorlage für ein Beispiel Feld muss ich einige weitere Attribute hinzufügen:
@model decimal?
@{
var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
htmlAttributes["class"] += " inputmask-decimal";
}
@Html.TextBox("", string.Format("{0:c}", Model.ToString()), htmlAttributes)
Was ich in Htmlattributes im letzten Zeile in Editor-Vorlage habe, ist:
Beachten Sie, dass die „Klasse“ richtig erscheinen, aber die anderen Attribute aus der Extension Helper sind in einem Wörterbuch, was ist Ich mache falsch?
Wenn möglich, möchte ich nur Verlängerungs Helfer und nicht Editor-Vorlage ändern, so dass ich denke, die Routevaluedictionary zu EditorFor geben müssen ein anonymes Objekt werfen ...
https://cpratt.co/html-editorfor-and-htmlattributes/ –