c# - 如何通过IEnumerable列表查看

标签 c# asp.net-mvc

我再次想问一些关于如何制作和传递 IEnumerable 列表的问题?

我的 Controller :

public class BookController : Controller
{
   // GET: Book
    public ActionResult Index()
    {
        BookModel viewBookList = new BookModel();
        viewBookList.ViewBookListing(); // viewBookList.ViewBookListing() 
                                        // pass the model values in 
                                        // ViewBookListing method which is located into my bookmodel
        return View(viewBookList);
    }
}

我的模型:

  namespace myWeb.Models
  {
        public class BookModel
        {
            public List<BookModel> showAllBooks = new List<BookModel>();
            // *other properties*
 public DataTable viewAllBooks()
        {
            try
            {
                Connection viewAll = new Connection();
                viewAll.cmdType = CommandType.StoredProcedure;
                viewAll.SQL = "insertSelectUpdateDeleteBooks";
                viewAll.ParamAndValue = new string[,]
                {
                {"@bookid", "" },
                {"@authorid", "" },
                {"@bookcatid", "" },
                {"@booktitle", ""},
                {"@isbn", ""},
                {"@pubplace", "" },
                {"@pubdate", "" },
                {"@bookphoto", "" },
                {"@statementtype", "Select" }
                };
                return viewAll.GetData();
            }
            catch (Exception)
            {
                throw;
            }
   }

返回viewAll.GetData();这个 GetData 从我的数据访问层获取数据或记录

        public void ViewBookListing()
        {
            List<BookModel> showAllBooks = new List<BookModel>();
            DataTable dt = this.viewAllBooks();
            if (dt != null)
            {
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow row in dt.Rows)
                    {
                        showAllBooks.Add(new BookModel()
                        {
                            qty = int.Parse(row["Quantity"].ToString()),
                            bookTittle = row["bookTitle"].ToString(),
                            authorName = row["Author"].ToString(),
                            ISBN = row["ISBN"].ToString(),
                            pubPlace = row["pubPlace"].ToString(),
                            pubDate = DateTime.Parse(row["pubDate"].ToString()),
                            DDC = row["DDC"].ToString(),
                            edition = row["edition"].ToString(),
                            volume = row["volume"].ToString(),
                            CategoryName = row["Category"].ToString()

                        });
                    }
                }
            }
            this.showAllBooks = showAllBooks;
        }
    }
}

这是我的 View 页面或索引。我不喜欢这种将数据传递到 View 中的方式,我想使用 IEnumerable 传递模型数据或数据,但问题是,我不知道该怎么做。

@using myWeb.Models;
@model BookModel
@{
    ViewBag.Title = "Index";
}

@foreach(myWeb.Models.BookModel item in Model.showAllBooks)
{
        <tr>
            <td></td>
            <td>@Html.DisplayFor(Model => item.bookTittle)</td>
            <td>@Html.DisplayFor(Model => item.authorName)</td>
            <td>@Html.DisplayFor(Model => item.ISBN)</td>
            <td>@Html.DisplayFor(Model => item.CategoryName)</td>
            <td>@Html.DisplayFor(Model => item.DDC)</td>
            <td>@Html.DisplayFor(Model => item.pubPlace)</td>
            <td>@Html.DisplayFor(Model => item.pubDate)</td>
            <td></td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>
}

最佳答案

您的模型看起来很像存储库或服务。通常,模型不参与数据库或 UI 事件。

但是为了回答你的问题,

    public ActionResult Index()
    {
        BookModel viewBookList = new BookModel();
        viewBookList.ViewBookListing(); //this should be done by a Service
        return View(viewBookList.showAllBooks);
    }

@using myWeb.Models;
@model List<BookModel>
@{
    ViewBag.Title = "Index";
}

@foreach(var item in Model)
{ 
   ...
}

关于c# - 如何通过IEnumerable列表查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646899/

相关文章:

c# - 调试时检查 IEnumerable "stack"?

c# - 当不同类型的列表的属性值相等时,从列表中排除的 Linq 查询?

c# - 以编程方式对开始菜单进行排序

asp.net-mvc - 使用 SSL 一个应用程序的多个网站

asp.net-mvc - ASP.Net MVC 自定义身份验证

c# - Click 事件的 XAML 参数

c# - Visual Studio在azure中的wwwroot内部署文件夹在哪里

javascript - 如何使用 View 中的脚本方法从 Razor 列表框中获取变量

asp.net-mvc - 我的项目中存在多个同名 Controller 的问题

c# - 使用复杂数据类型在 EF 中调用存储过程