0

View の 2 つの div を 2 つの ViewModel からのデータで埋めたいのですが、問題があります。

私の2つのビューモデル:

public class ChatLogsNameTimeViewModel
{
    public UserProfile UserProfile { get; set; }

    public string Message { get; set; }

    public DateTime Time { get; set; }
}

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    public string UserName { get; set; }

    public string Email { get; set; }

    public bool IsOnline { get; set; }

    public virtual ICollection<ChatLogs> ChatLogs { get; set; }
}

つまり、ビューの 1 つの div に ChatLogsNameTimeViewModel のデータを表示し、ビューの他の div に UserProfile のデータを表示したいということです。

これは、上記の両方のビューモデルを使用する私のビューモデルです:

public class ChatLogsUsersViewModel
{
    public IEnumerable<ChatLogsNameTimeViewModel> ChatLogs { get; set; }

    public IEnumerable<UserProfile> Users { get; set; }
}

そして、これはコントローラーでの私の Index() アクションです:

var chatLogs = db.getChatLog().ToList();
var users = dba.getOnlineUsers().ToList();

var view = new ChatLogsUsersViewModel(chatLogs, users);
return View(view);

私の問題は、ViewModel 属性にまったくアクセスできないことです。

ビューで foreach ループを作成すると、アクセスできるのは次のとおりです。

ここに画像の説明を入力 つまり、属性にアクセスして foreach で出力することはできません。

私はビューでこれを持っています:

@model IEnumerable<Chat.Models.ChatLogsUsersViewModel>

コントローラーで何かを正しく行っていないと思います。私はメソッドを持っておりgetChatLog()getOnlineUsers()モデルに実装しています。それらは単独で問題なく動作します。それらを 1 つのビューで連携させる方法がわかりません。

4

2 に答える 2

2

あなたのモデルは間違ったモデルに向かって強く型付けされています。Queti が言ったように、モデルは type でなければなりません@model Chat.Models.ChatLogsUsersViewModel

そのまま、モデルはこれらのモデルのコレクションにアクセスしようとしています。そうすれば、次のことがわかるはずです。

@for each (var x in Model) {
    x.
}

x は単一ChatLogsUsersViewModelであり、開発環境でそのプロパティを表示する必要があります。しかし、繰り返しますが、これはモデルをここで強く型付けしたい方法ではありません。

私が間違っていなければ、これがあなたがやろうとしていることであり、 for each ループを使用してデータにアクセスできます。

@model Chat.Models.ChatLogsUsersViewModel

for each (var log in Model._chatLogs) {
    @<div>@log.Message</div>
}
...
for each (var user in Model._users) {
    @<div>@user.UserName</div>
}
于 2013-08-08T03:03:23.187 に答える