控制器的 IEnumerable Ajax.Beginform 为空
IEnumerable Ajax.Beginform to Controller is null
我有一个视图包含通过模型传递的用户列表。我想要做的是为每个用户使用一个按钮,将 userId 传递回控制器,以便我可以存储它。类似于 Like/Unlike 按钮。
@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>
当我 post 返回 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; }
}
如果有人有线索会有所帮助。我一直坚持这一点,无法弄清楚为什么控制器中的文本值为空。
你的方法有误。您的代码输出是带有模型列表和多个提交按钮的单一表单。我可以向您推荐我对类似问题的解决方案。
@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();
}
我有一个视图包含通过模型传递的用户列表。我想要做的是为每个用户使用一个按钮,将 userId 传递回控制器,以便我可以存储它。类似于 Like/Unlike 按钮。
@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>
当我 post 返回 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; }
}
如果有人有线索会有所帮助。我一直坚持这一点,无法弄清楚为什么控制器中的文本值为空。
你的方法有误。您的代码输出是带有模型列表和多个提交按钮的单一表单。我可以向您推荐我对类似问题的解决方案。
@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();
}