Wyświetlanie danych z tabeli i wysyłanie do widoku

0

Witam serdecznie.

Mam taki problem dotyczący ASP .NET MVC.
Chciałbym sczytać przykładowe dane z tabli Northwind przy użyciu Entity Framework i wyświetlić je w widoku.
Z tym, że chciałbym uzależnić to od parametru w Routingu.
{controller}/{dane}/{id?}

I zastanawiam się jak to zrobić.

Mam standardowy controller Home i w nim staram się zdefiniować metodę, która pobierze mi dane np z tabeli Products.

 
public NorthwindEntities ReadAllProducts()
        {
            NorthwindEntities dbContext = new NorthwindEntities();
            var all = dbContext.Products.ToList();
            return all; // tutaj nie wiem jak zwrócić pobrane dane do widoku
        } 

Jakiś problem z typami:

Error	1	Cannot implicitly convert type 'System.Collections.Generic.List<NorthwindDisplay.Products>' to 'NorthwindDisplay.NorthwindEntities'
 

I kombinuje w ten sposób:

  
[Route("Data/{id?}")]
        public ActionResult OrdersList(int id)
        {
            if (id >= 1)
            {
                return View("Index",ReadDataFromTable());
            }
            else
            {
                return null;
            }
        } 

I jak uzależnić to od parametru w Routingu?

Pozdrawiam i proszę o pomoc :)

0

Troche pozmieniałem i w widoku mam coś takiego:

 
@model IEnumerable<Products>
@{
    ViewBag.Title = "Home Page";
}

<div class="jumbotron">
   <h1>Wyswietl dane z bazy</h1>
</div>

<div class="row">
    <div class="col-md-4">
      @foreach (var prod in Model)
        {
            <tr>
                <td>@prod.ProductID</td>
                <td>@prod.ProductName</td>
                <td>@prod.QuantityPerUnit</td>
                <td>@prod.ReorderLevel</td>
                <td>@prod.SupplierID</td>
                <td>@prod.UnitPrice</td>
                <td>@prod.UnitsInStock</td>
                <td>@prod.UnitsOnOrder</td>
            </tr>
        }
    </div>
</div>

Natomiast w controllerze wrzuciłem wszystko do jednej akcji

 
 [Route("Data/{id?}")]
        public ActionResult ProductsList(int id)
        {
            if (id >= 1)
            {
                using (var dbContext = new NorthwindEntities())
                {
                    var all = dbContext.Products.ToList();
                    return View("Index", all);
                }
            }
            else
            {
                return null;
            }
        }

Tylko teraz w widoku wywala mi Exception przy foreachu, że odwołanie obiektu nie zostało ustawione...
Co robie źle?

0

Właściwie to jeszcze to uprościłem

        [Route("Home/Index/{id?}")]
        public ActionResult Index(int id)
        {
            if (id >= 1)
            {
                using (var dbContext = new NorthwindEntities())
                {
                    var all = dbContext.Products.ToList();
                    return View("Index", all);
                }
            }
            else
            {
                return null;
            }
        }
 

Ale chyba coś nie tak z tym Rutingiem robie bo wywala mi, że podany widok nie istnieje.

0

Ok już rozwiązałem ten problem.

0

Jak już dzielisz się z nami doświadczeniami, to napisz jak rozwiązałeś problem. Może ktoś będzie miał podobny.

1

Spoko już mówie.

Więc chcąc wylistować wszystkie dane z tabeli np. Produkty stworzyłem sobie nowy kontroler ProductController ( nie pusty tylko z read/write methods).
Oczywiście do kontrolera Product stworzyłem odpowiedni widok typu Lista.

Tam w akcji zdefiniowałem parametr id count ( który świadczy o ilości wypisywanych rekordów )

Wpisująć http://localhost:port/Produkt/Index?count=4 wyświetlam np. 4 rekordy.

Tak zdefiniowałem akcje w kontrolerze:


 public ActionResult Index(int? count)
        {
            using (var dbContext = new NorthwindEntities())
            {
                var all = dbContext.Products.ToList();
                if (count == null)
                {
                    return View(all);
                }

                return View(all.Take((int)count));
            }
        }

 

Tak natomiast to wygląda w moim widoku!


@model IEnumerable<NorthwindDisplay.Products>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.ProductName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.SupplierID)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.CategoryID)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.QuantityPerUnit)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.UnitPrice)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.UnitsInStock)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.UnitsOnOrder)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.ReorderLevel)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Discontinued)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SupplierID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.QuantityPerUnit)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.UnitPrice)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.UnitsInStock)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.UnitsOnOrder)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ReorderLevel)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Discontinued)
        </td>

        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.ProductID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ProductID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ProductID })
            @Html.ActionLink("Index", "Index", new { id = 5 })
        </td>
        
    </tr>
}

</table>
 

Tak wygląda ostateczne rozwiązanie :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1