如何提取通过委托参数传递的参数

本文关键字:参数传递 参数 何提取 提取 | 更新日期: 2023-09-27 17:51:08

我尝试在MVC中构建一个助手。我尝试像这样传递参数:

@Html.InputHandler(settings =>
{
    settings.Name = "Julio";
    settings.Mask = "000-000-000";
    settings.visible = false;
    settings.Label = true;
    settings.htmlAttributes = new { @class="form-control" }
})

我有下面的代码来定义参数

public delegate void Action<in T>(T obj);
public class InputSettings : SettingsBase
{
    public string Name { get; set; }
    public bool Label { get; set; }
    public string Binding { get; set; }
    public bool visible { get; set; }
    public object htmlAttributes { get; set; }
    public string Mask { get; set; }
}

的问题是我不能得到值从帮助器

传递
public static MvcHtmlString InputHandler(this HtmlHelper htmlHelper, Action<InputSettings> method)
    {
        var parameters = method. ???        
        return new MvcHtmlString("");
    }

谢谢的!

如何提取通过委托参数传递的参数

为了检索body(因为当您尝试检索它时,它已经被编译并JIT到一个非常不同的状态),您将需要一个Expression<Action<T>>。但是,不能将lambda语句体转换为表达式树。因此,最好将强类型对象作为Func传入,然后立即回调结果。

void Main()
{
    InputHandler(() => new InputSettings {
        Name = "Test1",
        Mask = "test mask"
    }); 
}
public static MvcHtmlString InputHandler(this HtmlHelper htmlHelper, 
    Func<InputSettings> method)
{
    var parameters = method();        
    return new MvcHtmlString("");
}