2015-05-07 34 views
0

我有一個視圖包含一個通過模型傳遞的用戶列表。我想要做的是爲每個用戶使用一個按鈕,將userId傳遞迴控制器,以便我可以存儲它。類似於一個喜歡/不喜歡按鈕。IEnumerable控制器的Ajax.Beginform爲空

@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; } 

    } 

如果有人有線索會有幫助。我一直堅持這一點,並不能找出爲什麼控制器中的文本值爲空。

回答

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是沒有這樣做的正確方法。感謝您的快速回復。 –

相關問題