GridView in MVC.NET

0

Hej,

Proszę o pomoc !

Dodałem sobie model bazy danych do apki i teraz chciałbym aby po uruchomieniu aplikacji, po zalogowaniu i kliknięciu zakładki "MyTickets" ukazała się lista ticketów zalogowanego usera.

Dodałem w kontrolerze poniższą metodę:

    public ActionResult MyTickets()
        {
            var tickets = db.Zgloszenia.Where(x => x.Username == User.Identity.Name);
            return View();
        }

A w widoku mam coś takiego

@model Webform.Models.Zgloszenia

@{
    ViewBag.Title = "MyTickets";
}

<h2>MyTickets</h2>

@using (Html.BeginForm("MyTickets", "Zgloszenia", FormMethod.Post))
{
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Description)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Priority)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Environment)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Username)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.TicketNumber)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Date)
            </th>
            <th></th>
        </tr>

    </table>

}

Oczywiście program sypie błędami - jak to zrobić aby dane zostały poprawnie wyświetlane (tylko taski gdzie username jest taki sam jak zalogowany useer ?)

0

@tomekind:

Spróbuj tak

zamień:

@model Webform.Models.Zgloszenia

na

@model IEnumerable<Webform.Models.Zgloszenia>
0

@WeiXiao:
Już nie ma tego błędu ale nie pokazuje ticketów - tylko same nagłówki kolumn :)

Jak ogarnąć aby wyświetlał tickety zalogowanego usera ?

0

Sprawdź czy twoje wyrażenie zwraca Ci poprawne dane, pokaż screen błędu wtedy można pomóc.

0

@tomekind:

Spróbuj może w ten sposób, tak na początek.

A HTMLa sobie później sam przerób :P

@foreach (var ticket in Model)
{
    <label>Description:</label>
    <label>@ticket.Description</label>

    <label>Priority:</label>
    <label>@ticket.Priority </label>

    <label>Environment:</label>
    <label>@ticket.Environment</label>

    <label>Username:</label>
    <label>@ticket.Username</label>

    <label>TicketNumber:</label>
    <label>@ticket.TicketNumber</label> 

    <label>Date:</label>
    <label>@ticket.Date</label>
}
0

@WeiXiao:

wydaje mi się ze w kontrolerze jest błąd. Próbowalem jeszcze przez query ale też nic?
Na pewno wszystko jest ok w metodzie ?

0
tomekind napisał(a):

@WeiXiao:

wydaje mi się ze w kontrolerze jest błąd. Próbowalem jeszcze przez query ale też nic?
Na pewno wszystko jest ok w metodzie ?

Spróbuj na końcu dać .ToList()

db.Zgloszenia.Where(x => x.Username == User.Identity.Name).ToList();

0

@WeiXiao:

dałem coś takiego w View


@{
    ViewBag.Title = "MyTickets";
}

<h2>MyTickets</h2>

@using (Html.BeginForm("MyTickets", "Zgloszenia", FormMethod.Post))
{

    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Description)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Priority)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Environment)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Username)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.TicketNumber)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Date)
            </th>
            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Description)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Priority)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Environment)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Username)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.TicketNumber)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Date)
                </td>

            </tr>
        }

    </table>

}```

 i mam bład jak klikam w zakłądkę 

Additional information: Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.

metoda wygląda tak

```   public ActionResult MyTickets()
        {
            var tickets = db.Zgloszenia.Where(x => x.Username == User.Identity.Name).ToList();
            return View();

        }
0

Spróbuj tak na początek z tym View:

@model IEnumerable<Webform.Models.Zgloszenia>

@{
    ViewBag.Title = "MyTickets";
}

<h2>MyTickets</h2>

@foreach (var ticket in Model)
{
    <label>Description:</label>
    <label>@ticket.Description</label>

    <label>Priority:</label>
    <label>@ticket.Priority </label>

    <label>Environment:</label>
    <label>@ticket.Environment</label>

    <label>Username:</label>
    <label>@ticket.Username</label>

    <label>TicketNumber:</label>
    <label>@ticket.TicketNumber</label> 

    <label>Date:</label>
    <label>@ticket.Date</label>
}

Jeszcze pozostaje zwrócić te tickets do View

public ActionResult MyTickets()
{
    var tickets = db.Zgloszenia.Where(x => x.Username == User.Identity.Name).ToList();

    return View(tickets); // <---
}
0

@WeiXiao: Piękna spawa !! Działa dzieki wielkie!

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