asp.net mvc 4.0 ajax, дублированный контент

Итак, прежде всего я новичок в asp.net mvc и ajax. То, что я пытаюсь сделать, очень просто;

У меня есть таблица, отображающая список событий, которые может посетить вошедший в систему пользователь. каждый элемент в списке имеет ajax.BeginForm(), который указывает на действие, которое свяжет пользователя с событием.

Когда пользователь подключается к событию, страница должна обновляться, чтобы количество участников правильно отображалось на странице.

Все, это работает правильно. Но что происходит, когда страница обновляется, так это то, что все содержимое моей страницы _Layout.cshtml дублируется внутри копии «div id = «tableevent», которую я указал в «UpdateTargetId» для обновления.

Фрагмент представления

<div id="tableevents">
    <table class="table table-striped table-bordered table-condensed">

//I DISPLAY TABLE ITEMS HERE.

           @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" />                             
                    }  


        </table>
    </div>

Действие AddAttendantToEvent Возможно, здесь я ошибся. Раньше я просто отправлял данные в это действие через обычную форму отправки, без ajax. Я ничего не изменил в этом действии.

[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();
        return RedirectToAction("Index");
    }

    {
        return View();
    }

}

Индекс Действие, которое перенаправляется на: здесь инициируется модель представления, содержащая данные, которыми заполнена моя таблица.

public ViewResult Index()
{
    ViewModelTest viewmodel = new ViewModelTest();
    viewmodel.events = madklubeventRepository.AllIncluding(madklubevent => madklubevent.Attendants).Take(10);
    viewmodel.users = kitchenuserRepository.All;

    return View(viewmodel);
}

Почему копируется div и почему все содержимое моей основной страницы _Layout дублируется внутри копии тега?

Пожалуйста, направьте меня в правильном направлении! :)


person Kristian Nissen    schedule 15.10.2013    source источник


Ответы (1)


Вы должны вернуть PartialView, который содержит только тот HTML, который вы хотите отобразить в своем div.

  [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)

        }

        {
            return View();
        }

    }
person WannaCSharp    schedule 15.10.2013