我创建了一个HTML Helper扩展,该扩展在MVC中调用编辑器模板局部视图(MyView)。

我正在通过对象htmlAttributes参数将其他HTML属性传递给HTML Helper Extension。在HTML Helper Extension中,htmlAttributes被转换为RouteValueCollection(可以在此处使用IDictionary)并存储在ModelProperty对象中:

public static MvcHtmlString TextBoxFor(this HtmlHelper html, ModelProperty prop, object htmlAttributes)
{
    prop.ControlHtmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
    return PartialExtensions.Partial(html, "MyView", prop);
}


在“ MyView”部分视图中,我想呈现控件并使用传递的HTML属性,因此我调用:

Html.TextArea(Model.ControlName, Model.Value, Model.ControlHtmlAttributes);


但是,由于第3个参数应该是'object htmlAttributes',因此该方法起作用了,如何将Model.ControlHtmlAttributes转换为对象htmlAttibutes?

最佳答案

无论如何要回答您的问题:

    public static object ToAnonymousObject(this IDictionary<string, object> @this)
    {
        var expandoObject = new ExpandoObject();
        var expandoDictionary = (IDictionary<string, object>) expandoObject;

        foreach (var keyValuePair in @this)
        {
            expandoDictionary.Add(keyValuePair);
        }
        return expandoObject;
    }

关于c# - MVC-将IDictionary或RouteValueDictionary转换为对象htmlAttributes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20075635/

10-13 08:12