使用asp.net mvc将html foreach循环数据转换为webgrid

Posted

技术标签:

【中文标题】使用asp.net mvc将html foreach循环数据转换为webgrid【英文标题】:Convert html foreach loop data to webgrid using asp.net mvc 【发布时间】:2021-09-03 03:14:18 【问题描述】:

下面的 html 表格使用两个循环条件填充,同样我想使用两个循环条件填充 Webgrid

<table class="awe-ajaxlist table_dashboard">
    <tr class="tbl_header">
        <td>
            Payor
        </td>
        <td>
            Check #
        </td>
        <td>
            Billed Amount
        </td>
        <td>
            Paid Amount
        </td>
        <td>
            Check Date
        </td>
        <td>Download File</td>
    </tr>
    @foreach (var i in (List<MyDME.Data.Model.ERNFileRequestDTO>)ViewBag.lst)
    
        for (int j = 0; j < i.Parse835Details.storedChkNo.Count; j++)
        

            <tr>
                <td>
                    @i.Parse835Details.storedPayorName[j]
                </td>
                <td>
                    @i.Parse835Details.storedChkNo[j]
                </td>
                <td>
                    @i.Parse835Details.storedTotalBilled[j]

                </td>
                <td>
                    @i.Parse835Details.storedTotalPaid[j]

                </td>
                <td>
                     @(i.Parse835Details.storedChkDate[j].Substring(4, 2) + "/" + i.Parse835Details.storedChkDate[j].Substring(6, 2) + "/" + i.Parse835Details.storedChkDate[j].Substring(0, 4))

                </td>
                <td>
                    <a href='/PatientManagement/DownloadUploadedDocument?fileName=@Html.Raw(i.path)'>Download</a>

                </td>
            </tr>


        

    
            </table>

我尝试使用以下代码填充网络网格中的一个字段。

@
      var grid2 = new WebGrid();
    List<WebGridColumn> cols = new List<WebGridColumn>();
    foreach (var i in (List<MyDME.Data.Model.ERNFileRequestDTO>)ViewBag.lst)
    
        for (int j = 0; j < i.Parse835Details.storedChkNo.Count; j++)
        
            cols.Add(grid2.Column("Payor", format:@<text> <span class="display-mode">@i.Parse835Details.storedPayorName[j]</span> </text>, style: "col1Width"));

        
    


当我在这一行的代码行完成后点击调试模式时

var grid2 = new WebGrid();

显示以下错误。

【问题讨论】:

你能解释一下什么是“不适合我”吗? 赏金不会让你的问题有答案。想想它在完全陌生的人眼中的样子往往会更有成效。您仍然没有澄清“不为我工作”。调试器中的错误不会解决它,调试器可能会显示运行时不会发生的各种错误。相关的是当您运行代码时会发生什么,以及它如何偏离应该发生的情况。 @mohdmazharkhan 在问这个问题之前,您是否对如何使用 WebGrid 进行过任何类型的研究?这似乎是XY problem。 实际的错误信息是什么。这些是我们需要帮助诊断问题的细节。显示的图像没有提供任何有用的信息。 @MaciejLos OMG,仅此而已吗?如果只有 OP 显示 runtime 错误而不是调试器屏幕截图。真是浪费时间和代表。 【参考方案1】:

您在问题中包含的异常正在发生,因为您尚未将 WebGrid 绑定到数据源。您似乎也没有会吐出表格的代码,因此这可以解释为什么如果这也是一个问题,您将看不到表格的任何输出。

如果您想使用WebGrid 来显示您的数据,那么如果您先简化您的对象,您将会轻松很多。我认为您正在使用的结构过于复杂/脱节,这使问题变得比应有的复杂得多。

看起来你正在使用这样的结构:

public class ERNFileRequestDTO

    public ParsedRecords Parse835Details  get; set; 


public class ParsedRecords

    public List<string> storedPayorName  get; set; 
    public List<string> storedChkNo  get; set; 
    public List<string> storedTotalBilled  get; set; 
    public List<string> storedTotalPaid  get; set; 
    public List<string> storedChkDate  get; set; 
    public List<string> path  get; set; 

WebGrid 期待一个更像这样的扁平对象:

public class ConsolidatedRecordForDisplay

    public string storedPayorName  get; set; 
    public string storedChkNo  get; set; 
    public string storedTotalBilled  get; set; 
    public string storedTotalPaid  get; set; 
    public string storedChkDate  get; set; 
    public string path  get; set; 

我创建了一个与您所描述的结构相匹配的数据集(尽管 IMO 将它们解析为行而不是来自原始源的列比仅将其转换为显示更有意义):

var raw = new List<ERNFileRequestDTO>

    new ERNFileRequestDTO 
        Parse835Details = new ParsedRecords 
            storedPayorName = new List<string> "bob", "jane", "john", "jill",
            storedChkNo = new List<string> "1","2","3","4" ,
            storedChkDate = new List<string>  "20210625","20210624","20210623","20210622" ,
            storedTotalBilled = new List<string>  "$500", "$600", "$700", "$800" ,
            storedTotalPaid = new List<string>  "$500", "$501", "$700", "$0" ,
            path = new List<string>"file1.pdf", "file2.pdf", "file3.pdf", "file4.pdf"
        
    
;

您可以通过执行您已经在执行的相同样式的嵌套循环来获得扁平数据模型:

ViewBag.lst = new List<ConsolidatedRecordForDisplay>();
foreach(var i in raw)

    for (var j = 0; j < i.Parse835Details.storedChkNo.Count; j++)
    
        ViewBag.lst.Add(new ConsolidatedRecordForDisplay
        
            storedChkDate = i.Parse835Details.storedChkDate[j],
            storedChkNo = i.Parse835Details.storedChkNo[j],
            storedPayorName = i.Parse835Details.storedPayorName[j],
            storedTotalBilled = i.Parse835Details.storedTotalBilled[j],
            storedTotalPaid = i.Parse835Details.storedTotalPaid[j],
            path = i.Parse835Details.path[j]
        );
    

然后使用更合适的简单视图逻辑显示它:

@
    var grid2 = new WebGrid(ViewBag.lst);

@grid2.GetHtml(
    columns: grid2.Columns(
                grid2.Column("storedPayorName", "Payor"),
                grid2.Column("storedChkNo", "Check #"),
                grid2.Column("storedTotalBilled", "Billed Amount"),
                grid2.Column("storedTotalPaid", "Paid Amount"),
                grid2.Column("storedChkDate", "Check Date", @<text>@item.storedChkDate.Substring(4, 2)/@item.storedChkDate.Substring(6, 2)/@item.storedChkDate.Substring(0, 4)</text>),
                grid2.Column("path", "Download File", @<text><a href='/PatientManagement/DownloadUploadedDocument?fileName=@Html.Raw(@item.path)'>Download</a></text>)
))

【讨论】:

以上是关于使用asp.net mvc将html foreach循环数据转换为webgrid的主要内容,如果未能解决你的问题,请参考以下文章

asp.net MVC之整合AJAX

使用asp.net mvc将html foreach循环数据转换为webgrid

如何将 ASP.NET MVC 3 页面的 HTML 放入 QUnit 测试中? [复制]

如何使用 asp.net mvc Html.DropDownList 帮助器将自定义项添加到下拉列表的顶部?

将动态添加的 html 表行作为参数发布到控制器 - ASP.NET Core/MVC

Asp.Net MVC4入门指南: 入门介绍