ASP.NET MVC3 Ajax: InsertionMode.Replace не работает должным образом - PullRequest
0 голосов
/ 23 декабря 2011

Я новичок в MVC, и мне это нравится, но я столкнулся с проблемой.У меня есть представление с кодом, подобным следующему:

@model MyModel

@Ajax.ActionLink("Add", "Create", "User", null, 
    new AjaxOptions { 
        UpdateTargetId = "mydiv", 
        InsertionMode = InsertionMode.Replace, 
        HttpMethod = "GET"
    }, 
    new {
        @class = "add"
    })

<div>
    @Html.Partial("UserTable", Model.RegisteredUsers)
</div>

<div id="mydiv" />

Это, вероятно, довольно очевидно, но на странице отображается список пользователей (частичное представление "UserTable") и имеется ссылка для администратора нанажмите, чтобы создать нового пользователя.Форма создания пользователя - это частичное представление, которое действует как всплывающее окно над таблицей пользователей.Вот действие контроллера, которое возвращает форму создания пользователя:

public string Create()
{
    Models.User user = new Models.User();
    PartialViewResult vr;
    ViewContext vc;
    StringWriter sw = new StringWriter();

    vr = PartialView("../../Views/User/UserForm", user);
    vr.ExecuteResult(this.ControllerContext);
    vc = new ViewContext(this.ControllerContext, vr.View, vr.ViewData, new TempDataDictionary(), sw);
    vr.View.Render(vc sw);

    return "<div style=\"position:absolute; top:200px; left:175px\">" + sw.ToString() + "</div>";
}

Причина, по которой я возвращаю строку вместо ActionResult (или что-то в этом роде), заключается в добавлении div-обертки, который создает «всплывающее окно»эффект.Это все работает отлично, за исключением того, что, помимо отображения во всплывающем окне, форма создания пользователя также отображается под таблицей пользователей, где «mydiv».Изучение исходного кода страницы показывает, что «mydiv» не заменяется, а код для формы создания пользователя помещается как в этот div , так и в новом всплывающем div, и ябезуспешно выясняя, почему.

Я думаю, что я ссылаюсь на правильные библиотеки jQuery:

<script src="@Url.Contetn("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Contetn("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

Может кто-нибудь сказать мне, почему у меня такое поведение и как его исправить?Или есть лучший подход к достижению того же эффекта, который вы можете порекомендовать?

TIA!

Джефф

РЕДАКТИРОВАТЬ:

О, забыл упомянуть: причина, по которой я не могу просто поместить div "popup" в саму форму создания пользователя, заключается в том, что он используется в других местах системы, и такое поведение там нежелательно.Я сам не создал эту форму, просто использовал код другого разработчика в моем сценарии.

1 Ответ

1 голос
/ 27 декабря 2011

Я думаю, я понял это. Я неправильно понял, что делал метод Render в действии контроллера. Это должно было быть очевидно, но на самом деле это частичное представление на странице. Он снова был написан, на этот раз с «всплывающим» div, когда действие вернулось.

Я нашел другой способ справиться с этим, хотя. Как я уже упоминал, я не мог изменить форму создания пользователя напрямую, но я создал другое частичное представление и добавил к нему форму создания пользователя через @Html.Partial, все обернутые во всплывающий элемент div. Затем все, что мне нужно было сделать, это вернуть этот «производный» частичный вид из действия контроллера, и он работал как чудо.

В любом случае, я просто подумал написать об этом, если кто-нибудь когда-нибудь окажется в подобной ситуации.

Jeff

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...