的WebGrid:无法从“lambda表达式”到“System.Func转换 “(WebGri

2019-09-29 10:29发布

我想处理一个ASP.NET MVC3 WinGrid渲染时,这可能是空日期时间的情况。 试图设置WebGridColumn时,我得到一个错误。 我有一个,我有工作,一个不是。 这是工作的一个小想法,对于HTML是辅助函数内部产生。 我想不出就是为什么理想的是行不通的。

这里是工作的一个:

$gridSummary.Column("OngoingDate", 
    header: "Ongoing", 
    format: Html.DateTimeActionLink, 
    style: "ongoingDate")

public static object DateTimeActionLink(this HtmlHelper htmlHelper, dynamic item)
{
    DateTime? linkDateTime = item.OngoingDate;
    if (linkDateTime != null && linkDateTime.HasValue)
    {
        var x = linkDateTime.Value.ToString("MM/dd/yyyy");
        return LinkExtensions.ActionLink(htmlHelper, x, "Edit", "MdsAsmtSectionQuestions", new { mdsId = item.OngoingId }, null);
    }

    return MvcHtmlString.Empty;
}       

这里是不正常的组件:

    $gridSummary.Column("AssessmentInfo", header: "Open Type | ARD",
                        format: (item) =>
                        {
                            return Html.DateTimeActionLink(
                                item.AssessmentDate,
                                "MM/dd/yyyy",
                                x => Html.ActionLink(item.AssessmentInfo + " | " + x, "Edit", "MdsAsmtSectionQuestions", new { mdsId = item.OngoingId }, null));
                        },
                        style: "assessmentInfo")

    public static object DateTimeActionLink(this HtmlHelper htmlHelper, dynamic item, string format, Func<string, MvcHtmlString> actionLink)
    {
        Nullable<DateTime> linkDateTime = item;

        if (linkDateTime != null && linkDateTime.HasValue)
            return actionLink(linkDateTime.Value.ToString(format));

        return MvcHtmlString.Empty;
    }

Answer 1:

的这一翻译:

...
format: (item) =>
                        {
                            return Html.DateTimeActionLink(
                                item.AssessmentDate,
                                "MM/dd/yyyy",
                                x => Html.ActionLink(item.AssessmentInfo + " | " + x, "Edit", "MdsAsmtSectionQuestions", new { mdsId = item.OngoingId }, null));
                        }
...

尝试:

...
format: (item) =>
                            Html.DateTimeActionLink(
                                    //added cast
                                    (Nullable<DateTime>)(item.AssessmentDate),
                                    "MM/dd/yyyy",
                                    //added cast
                                    x => Html.ActionLink((string)(item.AssessmentInfo) + " | " + x, "Edit", "MdsAsmtSectionQuestions", new { mdsId = item.OngoingId }, null));
...


Answer 2:

不能使用lambda表达式用剃刀的当前版本。 基本的有很酷,但除此之外,他们打破。 我觉得剃刀2.0支持,但我得查:)

没有什么错误使用HTML辅助。 这就是他们来这里的目的。 考虑到你基本上调用相同的代码。 如果你打算在其他位置使用的helper方法,那么你不会有重复代码。 保持干燥。

另外,我不知道为什么你有$我相当肯定,你需要一个@符号,因为它的C#方法,而不是jQuery的。



文章来源: WebGrid: cannot convert from 'lambda expression' to 'System.Func'