【问题标题】:How to pass IEnumerable list to view如何将 IEnumerable 列表传递给查看
【发布时间】:2019-02-12 09:36:52
【问题描述】:

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

我的控制者:

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;
            }
   }

return 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;
        }
    }
}

这是我的查看页面或索引。我不喜欢这种将数据传递到视图中的方式,我想使用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>
}

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您的模型看起来很像存储库或服务。通常,模型不参与数据库或 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)
    { 
       ...
    }
    

    【讨论】:

    • @Henk 先生,但如果我使用这个返回 View(viewBookList.ShowAllBooks());系统说:不可调用的成员不能像方法一样使用。
    • 你说得对,它不是方法而是字段。我将删除()
    • 但是先生,如果我删除 using myWeb.Models 怎么办;在我的查看页面的顶部?喜欢自动生成的列表视图......就像这个先生模型 IEnumerable 没有上面使用 myWeb.Models 的代码;?
    • 嗯...@using &lt;namespace&gt; 当然纯粹是可选的。您的类有一个固定的长名称,在 C# 或 cshtml 中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2020-06-16
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2020-10-26
    相关资源
    最近更新 更多