【问题标题】:MVC 5 ASP.Net Razor Cannot convert lambda expression to type 'MvcHtmlString' because it is not a delegate typeMVC 5 ASP.Net Razor 无法将 lambda 表达式转换为类型“MvcHtmlString”,因为它不是委托类型
【发布时间】:2016-08-03 08:06:26
【问题描述】:

我在将一些 html 插入 HtmlHelper 中的 Lambda 表达式时遇到了这个问题。 当我尝试将 lambda 表达式与一些 html 混合时。

HtmlCell<EmployeeViewModel>.Create(x=> new MvcHtmlString(@<div>@x.Email</div>), null) 我在@x.Email 上收到一条错误消息:

-无法将 lambda 表达式转换为类型“MvcHtmlString”,因为它不是委托类型。

-无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型

我的 HtmlHelper 的原型是:

public ICell<TModel> Create(Expression<Func<TModel, string>> html, object htmlAttributes = null)

我过去读过这篇文章:https://stackoverflow.com/a/18291265/3114267(但答案是从 2014 年开始的,所以它可能已经进化了)

你知道哪里出了问题吗?我该如何修复它以及如何混合 lambda 和一些“Html”?

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor lambda


    【解决方案1】:

    试试这个

    HtmlCell<EmployeeViewModel>.Create(x=> 
        new MvcHtmlString(String.Format("<div>{0}</div>", x.Email)), null)
    

    更新

    如果您想避免使用更复杂的 String.Format 或 html,请使用 @helper:

    HtmlCell<EmployeeViewModel>.Create(x=> func(x).ToHtmlString()), null)
    

    在视图中

    @helper func(EmployeeViewModel employeeViewModel )
    {
        <div>@employeeViewModel.Email</div>
    }
    

    【讨论】:

    • 它就是这样工作的,但我想避免使用字符串格式。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多