选择要在视图

时间:2015-07-05 17:30:04

标签: c# asp.net-mvc

我有一个控制器,用户可以使用该控制器添加朋友。控制器中的ActionMethods是:

[Authorize]
public ActionResult Add (string id = "")
{
    var model = _db.Users
            .OrderBy(r => r.UserName)
            .Where(r => r.Id == id).ToList()
            .Select(r => new FriendsList
            {
                RequesterID = HttpContext.User.Identity.GetUserId().ToString(),
                RequesteeID = id,
                UserName = r.UserName,
                Status = "NewRequest",
                RequestDate = DateTime.Now,
                AcknowledgeDate = DateTime.Now
            });

    return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Add (FriendsList friendslist)
{
    if (ModelState.IsValid)
    {
        _friend.Entry(friendslist).State = System.Data.Entity.EntityState.Modified;
        _friend.SaveChanges();
        return View(friendslist);
    }
}

视图代码如下:

@model Max.Models.Social.FriendsList
<h2>Add</h2>
<div>
    @Model.id = @Model.id;
    @Model.RequesteeID = @Model.RequesteeID;
    @Model.Status = @Model.Status;
    @Model.UserName = @Model.UserName;
    @Model.RequesterID = @Model.RequesterID;

    <p>Add @Model.UserName ?<input type="submit" value="Add" /></p>
</div>

我不确定如何获取从控制器传递的数据以回发到Add ...但这是我最好的猜测。

完成所有操作后,这是我从服务器返回的错误:

  

传递到字典中的模型项是类型的   &#39; System.Linq.Enumerable + WhereSelectListIterator`2 [Max.Models.ApplicationUser,Max.Models.Social.FriendsList]&#39 ;,   但是这个字典需要一个类型的模型项   &#39; Max.Models.Social.FriendsList&#39;

为什么我会收到错误?

1 个答案:

答案 0 :(得分:1)

您的添加操作方法从数据库中选择一个用户model,但该类型为System.Linq.Enumerable+WhereSelectListIterator'2[Max.Models.ApplicationUser,Max.Models.Social.FriendsList],而您的视图接受Max.Models.Social.FriendsList

所以你需要选择一条记录。您可以使用FirstOrDefault()

执行此操作
[Authorize]
public ActionResult Add (string id = "")
{
    var model = _db.Users
            .OrderBy(r => r.UserName)
            .Where(r => r.Id == id).ToList()
            .Select(r => new FriendsList
            {
                RequesterID = HttpContext.User.Identity.GetUserId().ToString(),
                RequesteeID = id,
                UserName = r.UserName,
                Status = "NewRequest",
                RequestDate = DateTime.Now,
                AcknowledgeDate = DateTime.Now
            })
            .FirstOrDefault();

    if (model == null)
    {
        // handle not found
    }

    return View(model);
}