IEnumerable Ajax.Beginform到Controller为空

时间:2015-05-07 05:51:08

标签: model controller null ajax.beginform

我有一个视图,其中包含通过模型传递的用户列表。我想要做的是为每个用户使用一个按钮,将userId传递回控制器,以便我可以存储它。类似于Like / Different Button。

@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时,我的控制器变量中得到一个空值。我不知道为什么我得到一个null变量,但我认为它可能需要对我的模型做一些事情?

我只是使用一个空控制器,我看到该值始终为null。

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

    }

如果有人有线索会有所帮助。我一直坚持这一点,无法弄清楚为什么控制器中的文本值为空。

1 个答案:

答案 0 :(得分: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();
}