2015-07-05 3 views
0

У меня есть контроллер, с помощью которого пользователь может добавлять друзей. В 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> 

Я не совсем уверен, как получить данные, переданные от контроллера, чтобы отправлять обратно Добавить. .. но это мое лучшее предположение.

Когда все сказано и сделано, это ошибка я получаю от сервера:

Модель элемент передается в словарь типа «System.Linq.Enumerable + WhereSelectListIterator`2 [ Max.Models.ApplicationUser, Max.Models.Social.FriendsList] ', , но для этого словаря требуется тип модели ' Max.Models.Social.FriendsList '.

Почему я получаю эту ошибку?

+0

Я немного запутался об образце коды friendsList является парами и никогда не использовал? Кроме того, что такое _friend? – Ju66ernaut

+0

Привет Крис, _friend - это класс, полученный из DbContext, который «DBSets» модели FriendsList. И да, это опечатка с моей стороны, параметр не используется. – Michael

+0

Я серьезно сомневаюсь, что вы были исключены из-за «обновления вашего вопроса»; более вероятно, что ваши изменения кардинально изменили смысл вопроса. Однако, принимая позицию, что «все, что я публикую, я никогда не изменю» в ответ, не будет намного лучше. Точка сайта должна обрабатывать высококачественные вопросы и ответы, а не препираться над орфографией и пунктуацией. – Claies

ответ

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); 
} 
+0

Сделал трюк! Большое спасибо! – Michael

Смежные вопросы