for& razor helper中的foreach循环导致CompilationException错误

时间:2015-07-02 04:54:03

标签: asp.net-mvc-4 loops razor twitter-bootstrap-3

我目前正在使用Razor视图引擎为我们公司的C#MVC4构建一个新网站的部分工作。我们使用Twitter Bootstrap 3提供基本主题,并使用TwitterBootstrapMVC中的Html帮助程序生成Html标记。

我目前正在处理的任务是创建一个Razor帮助程序(位于App_Code /中),它将自动生成并填充项目列表中的表。

首先,我试图构建标题行,但是,每当我尝试引入一个循环来生成标题的单元格(正文和页脚都这样做)时,我收到以下错误:

System.Web.Compilation.CompilationException
CS1502: The best overloaded method match for `System.Web.WebPages.HelperPage.WriteTo(System.IO.TextWriter, object)' has some invalid arguments

我试图使用的代码如下:

@helper NewGridView(object data, string[] headers) {
    // data is to be a list/array of items
    var Html = ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html;
    using (var table = Html.Bootstrap().Begin(new Table())) {
        using (var head = table.BeginHeader ()) {
            using (var row = head.BeginHeaderRow ()) {
                //for (int i = 0; i < headers.Length; i++)
                foreach (string header in headers) {
                    @row.Cell ("cell");    // had a static string here to test that the issue wasn't with the value from the array
                }
            }
        }
    }
}

如果我删除foreach循环(for循环也不起作用),并保留@row.Cell(...)调用,它可以正常工作,但是当for或foreach循环就位时,它刷新时会产生上述错误网站。

是否有关于Razor视图和循环的遗漏,或者我试图做的事情是不可能的?

2 个答案:

答案 0 :(得分:0)

由于headers是字符串数组,因此您只需使用它来获取行值。

@header代替@row.Cell ("cell");

 foreach (string header in headers)
 {
      @header
 }

答案 1 :(得分:0)

迟到的答案,几天后就解决了这个问题,但是在项目的其他方面陷入了困境,结果忘了发布答案。迟到总比没有好。

事实证明编译器在某些情况下对空间的使用非常挑剔。以下内容生成原始帖子中描述的错误。

foreach (string header in headers) {
    @row.Cell ("cell");
}

但以下工作正常。

foreach (string header in headers) {
    @row.Cell("cell");
}

似乎编译器由于某种原因放在foreach循环中时,不喜欢函数名和括号之间的空格。