Как отобразить в списке просмотра <string> - PullRequest
0 голосов
/ 18 марта 2019

В View «Index» выводится список пользователей, их имена, дата сообщения, сообщения. И рядом с каждым есть ссылка "Инфо". Как отобразить в представлении «Информация» List<string> ListMessage пользователя после нажатия на ссылку «Информация»? Вывод только пустая таблица :(

ASP.NET - хардкор.

Это моя Модель :

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Message { get; set; }
    public List<string> ListMessage { get; set; }
    public DateTime Date { get; set; }
}

Мой Контроллер:

[HttpPost]
    public ActionResult Index(User user)
    {
        IEnumerable<User> users = db.Users;
        if (user.Name == users.Where(i => i.Name == user.Name).ToString())
        {
            user.ListMessage = new List<string>();
            user.ListMessage.Add(user.Message);          
        }
        user.ListMessage = new List<string>();
        user.ListMessage.Add(user.Message);
        ViewBag.Customers = users;
        user.Date = DateTime.Now;
        db.Users.Add(user);
        db.SaveChanges();            
        return View();
    }
    [HttpGet]
    public ActionResult Info(int id)
    {
        IEnumerable<User> users = db.Users;
        ViewBag.Customers = users;
        var c = new User();
        c.ListMessage = new List<string>();
        ViewBag.Messages = c.ListMessage;
        return View(c.ListMessage);
    }

И Просмотр «Инфо»:

@{
    ViewBag.Title = "All messages";
}
@using MessageBank.Models
@model List<string>
        <table>               
            <tr>
                <td><p>Id</p></td>
                <td><p>Name</p></td>
                <td><p>Time</p></td>
                <td><p>Message</p></td>
                <td></td>
            </tr>
            @foreach (var el in Model)
            {
            <tr>
                <td><p>@Html.DisplayFor(m => el)</p></td>
                <td><p>@el</p></td>
            </tr>
            }
        </table>

Ответы [ 3 ]

2 голосов
/ 19 марта 2019

Вы не инициировали значения для ListMessage. Я пытался инициализировать c.ListMessage = new List<string> { "Test1", "Test2" };

 [HttpGet]
    public ActionResult Info(int id)
    {
        IEnumerable<User> users = db.Users;
        ViewBag.Customers = users;
        var c = new User();
        c.ListMessage = new List<string> { "Test1", "Test2" };
        ViewBag.Messages = c.ListMessage;
        return View(c.ListMessage);
    }

Показывает значения Test1 и Test2 в таблице.

Также не уверен, почему вы назначаете 2 ViewBag без их использования?

Может быть, вы хотите c.ListMessage = db.Users.Select(c=>c.Message).ToList()?

0 голосов
/ 20 марта 2019

TY всем за помощь!

@ haldo Почему вы удалили свое сообщение? Вы помогли мне! Thx!

Модель:

[HttpGet]
    public ActionResult Info(int id)
    {
        User user = db.Users.FirstOrDefault(u => u.Id == id);
        user.ListMessage = new List<string>() { user.Message };
        return View(user.ListMessage);
    }

Вид:

@{
    ViewBag.Title = "All messages";
}
@using MessageBank.Models
@model IEnumerable<string>

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Info</title>
</head>
<body>
    <div>
        <h3>Info</h3>
        <table>        
            <tr>
                <td><p>Message</p></td>
            </tr>
            @foreach (var el in Model)
            {
                <tr>
                    <td><p>@Html.DisplayFor(m => el)</p></td>
                    @*<td><p>@el</p></td>*@
                </tr>
            }
        </table>
        @foreach (var el in Model)
        {
            <ul>
                <li><p>@Html.DisplayFor(m => el)</p></li>
                @*<td><p>@el</p></td>*@
            </ul>
        }
    </div>
</body>
</html>
0 голосов
/ 18 марта 2019

Похоже, вы хотите, чтобы пользователь соответствовал id. Вам также нужно заполнить user.ListMessage Вы можете попробовать это:

[HttpGet]
public ActionResult Info(int id)
{
    // get user with user.Id == id
    User user = db.Users.FirstOrDefault(u => u.Id == id);

    if (user == null)
    {
        // handle null
    }

    // populate listmessage
    user.ListMessage = new List<string> { user.Message };

    // send a List<string> to view
    return View(user.ListMessage);
}

Затем таблица должна быть заполнена в представлении с использованием цикла foreach.


Если хотите, вы можете вернуть user в представление Info. В этом случае вы можете изменить на:

[HttpGet]
public ActionResult Info(int id)
{
    User user = db.Users.FirstOrDefault(u => u.Id == id);    

    // populate ListMessage
    user.ListMessage = new List<string> { user.Message };

    // return User model to view    
    return View(user);
}

Затем в представлении обновите foreach до следующего вида:

@{
    ViewBag.Title = "All messages";
}

@model YourNamespace.Models.User

    <table>   
        <tr>
            <th>Message</th>     
        <tr>           

        @foreach (var el in Model.ListMessage)
        {
            <tr>
                <td>@Html.DisplayFor(m => el)</td>
            </tr>
        }
    </table>

   // you can access Model.Id, Model.Name, Model.Date, Model.Message in this view too
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...