我正在尝试处理在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;
}
答案 0 :(得分: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));
...
答案 1 :(得分:1)
您不能将lambda表达式与当前版本的Razor一起使用。基本的很酷,但除此之外它们会崩溃。我认为Razor 2.0支持它,但我必须检查:)
使用Html助手没有任何问题。这就是他们的目的。考虑到你基本上调用相同的代码。如果您打算在其他位置使用帮助方法,那么您将不会有代码重复。保持干燥。
另外,我不确定为什么你有$
我很确定你需要一个@
符号,因为它是一个c#方法而不是jQuery。