2015-05-07 6 views
0

У меня есть список пользователей, прошедших через модель. То, что я хочу сделать, - это кнопка для каждого пользователя, которая передает userId обратно на контроллер, чтобы я мог его сохранить. Подобно кнопке Like/Unlike.IEnumerable Ajax.Beginform to Controller имеет значение null

@model IEnumerable<FindaRoom.Models.FilterViewModel> 
<h3>List of friends</h3> 
<div class="row"> 
    @using (Ajax.BeginForm("Add", "User", null, new AjaxOptions 
        { 
         HttpMethod = "POST", 
         OnSuccess = "SuccessMessage", 
         OnFailure = "FailMessage", 
        }, FormMethod.Post)) 
    { 
     foreach (var user in Model) 
     { 
      <div class="col-md-3"> 
       <div class="thumbnail"> 
        <div> 
         @Html.EditorFor(modelitem => user.FbInfo.UserId) 
        </div> 
        <input type="submit" value="Match Me" /> 

       </div> 
      </div> 
     } 
    } 
</div> 

Когда я отправляю обратно в user.FbInfo.UserId я получаю нулевое значение в моей переменной контроллера. Я не уверен, почему я получаю нулевую переменную, но я думаю, что она может что-то сделать с моей моделью?

Я просто использую пустой контроллер, и я вижу, что значение всегда равно нулю.

[HttpPost] 
    public ActionResult Add(FilterViewModel text) 
    { 
     return new HttpUnauthorizedResult(); 
     //var user = db.Users.Find(text); 
     //var curUser = UserManager.FindById(User.Identity.GetUserId()); 
     //curUser.Matches.Add(user); 
     //db.SaveChanges(); 
    } 

Моя модель такая же.

public class FilterViewModel 
{ 
    public FbInfo FbInfo { get; set; } 
    public Questions Questions { get; set; } 
} 
public class FbInfo 
    { 
     public FbInfo() 
     { 
      this.friendsList = new List<friends>(); 
      this.mutualFriendsList = new List<mutualFriends>(); 
     } 
     ... 
     [Key] 
     [ForeignKey("UserId")] 
     public ApplicationUser User { get; set; } 
     ... 
    } 
public class Questions 
    { 

      [Key] 
      public int id { get; set; } 
      [ForeignKey("UserId")] 
      public ApplicationUser User { get; set; } 
      public string UserId { get; set; } 

    } 

Если у кого есть ключ, который был бы полезен. Я немного застрял в этом и не могу понять, почему текстовое значение в контроллере равно null.

ответ

0

У вас неправильный подход. Вывод вашего кода - это одна форма со списком моделей и несколькими кнопками отправки. Я могу предложить вам решение аналогичной проблемы.

@model IEnumerable<FindaRoom.Models.FilterViewModel> 
<h3>List of friends</h3> 

<div class="row"> 
    @foreach (var user in Model) 
    { 
     <div class="col-md-3"> 
      <div class="thumbnail"> 
       <button data-button="@user.FbInfo.UserId" class="btn btn-danger btn-match">Match Me</button> 
      </div> 
     </div> 
    } 
</div> 

@section scripts { 
    <script> 
     $('.btn-match').click(function() { 
      _self = this; 
      var userId = $(_self).attr('data-button'); 
      $.ajax({ 
       type: 'POST', 
       url: '@Url.Action("Add", "User")', 
       data: { 
        userId: userId 
       }, 
       success: function (response) { 
        SuccessMessage(); 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        FailMessage(); 
       } 
      }); 
     }) 
    </script> 
} 

и ваши действия будут

[HttpPost] 
public ActionResult Add(string userId) 
{ 
    return new HttpUnauthorizedResult(); 
    //var user = db.Users.Find(userId); 
    //var curUser = UserManager.FindById(User.Identity.GetUserId()); 
    //curUser.Matches.Add(user); 
    //db.SaveChanges(); 
} 
+0

Да я думал, что Ajax.BeginForm не был правильный способ сделать это. Спасибо за быстрый ответ. –