1

私はいくつかの ajax をいじっていて、非常に奇妙で、私には非論理的なバグを経験しました。

フォームにラップされたイベントのリストをテーブルに表示しています。各イベントには一意の ID (EventID) があります。これは、ボタンが押されたときにアクションに送信されます。テーブルを囲む div が、アクションが返した部分ビューで更新されるようになりました。

問題

ビューがリロードされると、フィールド EventID を含むすべての HiddenFields が、同じ EventID を含むようになりました。アクションに提出されたもの

ビューにブレークポイントを配置して、HiddenField にどのような値が設定されているかを確認してみました。ここでは、正しい ID が実際にフィールドに設定されていることがわかります。ただし、ページが更新されると、すべての隠しフィールドには、最初にアクションに送信されたものと同じイベント ID が含まれます。

部分ビュー: _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