1

ASP.NET MVC3 WinGrid でレンダリングするときに null になる可能性のある DateTime のケースを処理しようとしています。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;
    }
4

2 に答える 2

1

現在のバージョンの Razor ではラムダ式を使用できません。基本的なものはクールですが、それを超えると壊れます。Razor 2.0 でサポートされていると思いますが、確認する必要があります :)

Html ヘルパーを使用しても問題はありません。それが彼らの目的です。基本的に同じコードを呼び出していることを考慮してください。別の場所でヘルパー メソッドを使用する予定がある場合は、コードが重複することはありません。乾いた状態に保ちます。

また、jQuery ではなく ac# メソッドであるため、シンボル$が必要であることは確かです。@

于 2012-06-16T03:58:02.553 に答える
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));
...
于 2012-06-15T20:23:33.860 に答える