我有一个视图,其中包含通过模型传递的用户列表。我想要做的是为每个用户使用一个按钮,将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; }
}
如果有人有线索会有所帮助。我一直坚持这一点,无法弄清楚为什么控制器中的文本值为空。
答案 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();
}