【发布时间】:2018-08-02 09:44:11
【问题描述】:
我想将数据发布到数据库,但我的视图模型在发布到控制器时是空的,我尝试了不同的方法,但每次我的视图模型都是空的。
这些是我的课:
public class Player
{
[Key]
public int Id { get; set; }
public string Name{ get; set; }
public string PreName{ get; set; }
}
public class Activitity
{
[Key]
public int Id { get; set; }
public string WhichActivity { get; set; }
public List<Player> Players { get; set; }
}
public class Aanwezigheid
{
[Key]
public int Id { get; set; }
public ReasonEnum Reason{ get; set; }
public int PlayerId{ get; set; }
public Player Player{ get; set; }
public List<Player> Players{ get; set; }
public int ActivityId { get; set; }
}
我的视图模型:
public class PresenceVM
{
public int PlayerId{ get; set; }
public int ActivityId { get; set; }
public string Name{ get; set; }
public string PreName { get; set; }
public ReasonEnum Reason { get; set; }
}
我的 HTTPGET 获取玩家列表,我想将玩家缺席原因放入数据库中。
[HttpGet]
public ActionResult Presence(int id)
{
var sp = _context.Players.ToList();
foreach(Players s in sp)
{
var van = new PresenceVM
{
PlayerId = s.Id,
Name = s.Name,
PreName = s.PreName,
ActivityId = id
};
list.Add(van);
}
return View(list);
}
我的 HttpPost
[HttpPost]
public ActionResult Presence(List<PresenceVM> list)
{
var sp = _context.Players.ToList();
var list = new List<Presence>();
foreach (Players s in sp)
{
var van = new Aanwezigheid
{
PlayerId = s.Id,
ActivityId = vm.ActivityId,
Reason = vm.Reason
};
list.Add(van);
_context.Presence.Add(van);
//_context.SaveChanges();
}
return RedirectToAction("Index", "Presence");
}
问题是我的 PresenceVm (viewmodel) 没有在我的控制器中获取任何数据。我不明白为什么?是因为一个清单吗?使用一个项目很容易将其发布到数据库。可能有多个项目?
编辑 1:
Get & Post 的视图模型
@model IEnumerable<....ViewModels.PresenceVM>
@{
ViewBag.Title = "Presence";
}
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.PreName)
</th>
<th>
@Html.DisplayName("Reason")
</th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.PreName)
</td>
<td>
@Html.EnumDropDownListFor(modelItem => item.Reason, "Present", new { @class = "form-control" })
</td>
</tr>
}
</table>
<form action="/Presences/Presence" method="post">
<div class="form-horizontal form-details">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</form>
【问题讨论】:
-
可能视图有
@model IEnumerable<PresenceVM>,但它里面的助手没有正确绑定的命名索引(请显示视图代码以确保)。 -
传入视图的模型:@model IEnumerable<....viewmodels.presencevm>
-
我猜在您看来,您使用的是
@foreach。改用@for试试 -
好吧,正如预期的那样,您在视图中使用了
@foreach (var x in Model)。尝试使用@for (var i = 1; i < Model.Count; i++)并为每个模型属性(例如model[i].PlayerId)放置索引。 -
您的 POST 视图中需要一个表单。没有表单,你怎么能把 smth 发布到服务器上?
标签: c# asp.net asp.net-mvc