asp.net mvc 4 - Ajax.ActionLink single record update in table row -
this project i'm working on modified version of nerddinner. made through nerddinner project ok. have upgraded mvc4 , ef4(as far can tell). however, i'm trying put rsvp ajax.actionlink in list of projects (what dinners in nerddinner). so, in table of projects, 1 of columns reserve link each row reserve project. however, it's updating database 1 rsvp record, , adding duplicate values database every record exists on page (so pagesize + 1 including original record got rsvped). so, in example below 11 records being added db same values. tried removing pagination code , entire recordset + 1 records added db. displays correctly, i'm getting duplicate records.
since things appear working... sort-of, don't know enough how troubleshoot or begin looking. i've done several google searches without finding similar i'm running into.
anyone know fault is? ...or better way accomplish this(with example)? assumed drop code in table, give each row specific div ids projectmsg , ok. but, looping through , adding records too.
here's have in way of code:
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 partial view
@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 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(); } } many thanks.
i stepped away checking page daily life. decided give 1 more go , figured out issue is, although i'm not sure why.
anyway, @ top of partial view, put script reference:
<script src="/scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script> when inspected element in browser, see repeating in html way down page (one each row...and parent). once removed reference on partial view , left reference on parent, duplicate records in db issue disappeared. so, best guess executing each script reference on page.
Comments
Post a Comment