1

我正在玩一些 ajax,并且遇到了一个非常奇怪且对我来说不合逻辑的错误。

我在表格中显示事件列表,以表格形式包装。每个事件都有一个唯一的 ID (EventID)。当按下按钮时,这将提交给操作。现在,表格周围的 div 将使用操作返回的部分视图进行更新。

问题

重新加载视图时,包含字段 EventID 的所有 HiddenFields 现在都包含相同的 EventID。提交给动作的那个

我尝试在视图中放置一个断点,以查看在 HiddenField 中放置了什么值。在这里可以看到正确的 id 实际上设置为该字段。但是当页面更新时,所有隐藏字段都包含与最初提交给操作的相同 eventid。

部分视图:_Events

@model SeedSimple.Models.ViewModelTest

<table class="table table-striped table-bordered table-condensed">

 @foreach (var item in Model.events)
        {
           @using (Ajax.BeginForm("AddAttendantToEvent", "MadklubEvents", new AjaxOptions()
                        {
                            HttpMethod = "post",
                            UpdateTargetId = "tableevents"
                        }))
                {

                    @Html.Hidden("EventID", item.MadklubEventID);            
                    <input type="submit" value="Join!" id="join" class="btn" />                             
                }

           @using (Ajax.BeginForm("RemoveAttendantFromEvent", "MadklubEvents", new AjaxOptions()
                {
                    HttpMethod = "post",
                    UpdateTargetId = "tableevents"
                }))
                {

                    @Html.Hidden("EventID", item.MadklubEventID);

                    <input type="submit" value="Leave" class="btn" />

                }

        }
</table>

AddAttendantToEvent 操作:

        [HttpPost]
        [Authorize]
        public ActionResult AddAttendantToEvent(int EventID)
        {

            if (ModelState.IsValid)
            {
                var uow = new RsvpUnitofWork();

                var currentUser = WebSecurity.CurrentUserName;
                var Event = uow.EventRepo.Find(EventID);
                var user = uow.UserRepo.All.SingleOrDefault(u => u.Profile.UserName.Equals(currentUser));
                user.Events.Add(Event);
                Event.Attendants.Add(user);
                uow.Save();
                ViewModelTest viewmodel = new ViewModelTest();
                viewmodel.events = madklubeventRepository.AllIncluding(madklubevent => madklubevent.Attendants).Take(10);
                viewmodel.users = kitchenuserRepository.All;

                return PartialView("_Events", viewmodel);
            }
            else
            {
                return View();
            }
        }

将 EventID 4 提交给操作后所有输入字段的外观

<input id="EventID" name="EventID" type="hidden" value="4"> 

我怀疑,这是由于 ajax 调用的一些副作用,我不知道。对此主题的任何启示将不胜感激:)

4

0 回答 0