我正在研究的这个项目是nerddinner的修改版本。我通过nerddinner项目确定了。我已升级到MVC4和EF4(据我所知)。但是,我正在尝试将RSVP Ajax.Actionlink放在项目列表中(什么是nerddinner中的晚餐)。因此,在项目表中,其中一列将是每行的保留链接以保留项目。但是,它使用一个RSVP记录更新数据库,然后为页面上存在的每个记录向数据库添加重复值(因此当前pagesize + 1包括获得RSVPed的原始记录)。因此,在下面的示例中,11个记录将添加到具有所有相同值的数据库中。我尝试删除所有分页代码,然后我将整个记录集+ 1条记录添加到数据库中。一切都正确显示,我只是得到了所有重复的记录。
由于事情似乎正在起作用......我不知道如何解决这个问题,甚至在哪里开始寻找。我已经完成了几次谷歌搜索而没有发现任何类似于我遇到的内容。
任何人都知道我的错在哪里? ...或者更好的方法来实现这个目标(举个例子)?我只是假设我可以删除表中的代码,给每一行projectmsg
特定的div ID,一切都会好的。但是,有些东西正在循环并添加所有这些额外的记录。
这就是我对代码的看法:
Index.cshtml
@model PagedList.IPagedList<ProjectSender.Models.Incident>
...
@foreach (var item in Model)
{
<tr>
<td>
@Html.ActionLink(item.Title, "Details", new { id = item.IncidentId })
</td>
<td>
@Html.DisplayFor(modelItem => item.Description)
</td>
<td>
@Html.Partial("_ReserveStatusList", item)
</td>
</tr>
}
_ReserveStatusList.cshtml部分视图
@model PagedList.IPagedList<ProjectSender.Models.Incident>
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
<div id="projectmsg_@(Model.IncidentId)">
@Ajax.ActionLink("Reserve this Project",
"RegisterAjax", "Projects",
new { id = item.IncidentId },
new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "projectmsg_@(Model.IncidentId)"})
</div>
IncidentsController
...
public ActionResult Index(string searchString, int? page)
{
int pageSize = 10;
int pageNumber = (page ?? 1);
IQueryable<Incident> incidents = null;
incidents = incidentRepository.FindRecentIncidents(searchString);
return View(incidents.ToPagedList(pageNumber, pageSize));
}
RSVPController
...
//
// AJAX: /Incidents/RegisterAjax/1
[HttpPost]
public ActionResult RegisterAjax(int id = 0)
{
RegisterProject(id);
return Content("RSVP Sent...");
}
//
// GET: /Incidents/Register/1
[HttpPost]
private void RegisterProject(int id = 0)
{
Incident incident = db.Incidents.Find(id);
if (!incident.IsUserRegistered(User.Identity.Name))
{
Project project = new Project();
if (User.Identity.IsAuthenticated)
{
IUserIdentity user = (IUserIdentity)User.Identity;
project.IUserId = user.Name;
project.IUser = user.FriendlyName;
}
incident.Projects.Add(project);
db.SaveChanges();
}
}
非常感谢。
答案 0 :(得分:0)
我每天都会离开这个页面来查看这个页面。我决定再给它一次,弄清楚问题是什么,虽然我不确定为什么。
无论如何,在局部视图的顶部,我把那个脚本引用:
<script src="/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
当我在浏览器中检查元素时,我可以看到它在页面中一直向下重复(每行一个......和父级)。一旦我删除了部分视图上的引用并刚刚将引用保留在父级上,db问题中的重复记录就消失了。所以,我最好的猜测是它正在为页面上的每个脚本引用执行。