【问题标题】:MVC 4 WebGrid C# ErrorMVC 4 WebGrid C# 错误
【发布时间】:2016-07-20 09:41:35
【问题描述】:

我正在尝试使用静态数据填充 Web 网格视图,但我没有任何运气。

我总是得到错误:

"A data source must be bound before this operation can be performed". 

我通过设置断点了解错误的来源。基本上,当页面加载完毕时,代码永远不会访问 Account() 函数。因为它不这样做,所以 allFiles 永远不会被初始化和返回。

最好的方法是从视图中调用 Action() 并初始化所有文件吗?我已经阅读了有关相同错误的其他问题,但没有人强调代码未访问控制器功能这一事实。

这里是控制器:

    public ActionResult Account()
    {
        FileModel file = new FileModel();
        List<FileModel> allFiles = new List<FileModel>();
        file.FileID = "1";
        file.UserID = "1";
        var data = allFiles;
        return View(data);
    }

这是模型

   public class FileModel
{
    public string FileID { get; set; }
    public string UserID { get; set; }
    public string FileName { get; set; }
    public string AddedOn { get; set; }
    public int Downloads { get; set; }
    public int Show { get; set; }
}

这里是视图

    @model IEnumerable<GridTest1.Models.FileModel>
    @{
       ViewBag.Title = "Files";
       WebGrid grid = new WebGrid(Model);
    }
    <h2>People</h2>
    @grid.GetHtml(columns: new [] {
         grid.Column("FileID"),
         grid.Column("UserID")
    })

【问题讨论】:

  • allFiles.Add(file); ?这条线是你错过的吗?
  • 我已经尝试过使用和不使用它。即使它是一个空列表,它在技术上也不应该给你一个错误。那不应该是问题。问题是永远不会返回帐户操作结果。不知道为什么
  • 尝试 IList 或 IEnumerable 而不是 List...只是猜测。像 List allFiles 一样使它成为 IEnumerable allFiles
  • 不,我也尝试过,但没有运气。我只是发现它确实在加载页面时不会进入帐户功能

标签: c# asp.net-mvc asp.net-mvc-4 webgrid


【解决方案1】:

您的控制器编码顺序错误。检查以下代码

    public ActionResult Account()
    {
        // Assign a value to class
        FileModel file = new FileModel();
        file.FileID = "1";
        file.UserID = "1";
        file.FileName = "Text.txt";
        file.AddedOn = "AddedOn";

        // Create instance for all file
        List<FileModel> allFiles = new List<FileModel>();

        // Add file model to list
        allFiles.Add(file);

        // Pass the file list to view
        return View(allFiles);
    }

查看

@model List<GridTest1.Models.FileModel>

@{
    ViewBag.Title = "Files";
    WebGrid grid = new WebGrid(Model);
}

@grid.GetHtml(columns: new[] {
         grid.Column("FileID"),
         grid.Column("UserID"),
         grid.Column("FileName"),
         grid.Column("AddedOn"),
    })

这会起作用

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多