Как передать IEnumerable список для просмотра - PullRequest
0 голосов
/ 12 февраля 2019

Опять хочу задать вопрос о том, как составить и передать список 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>
}

1 Ответ

0 голосов
/ 12 февраля 2019

Ваша модель очень похожа на репозиторий или сервис.Обычно модель не участвует в работе базы данных или пользовательского интерфейса.

Но чтобы ответить на ваш вопрос,

    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)
{ 
   ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...