ASP.NET MVC визуализирует частичное из метода POST - PullRequest
2 голосов
/ 20 июля 2010

Проблема

У меня есть Telerik TabControl, и каждая вкладка представляет собой частичное представление.Все работает гладко, когда запрос GET:

//
// GET: /ProductVersion/Translations        
public ActionResult Translations(Guid id)
{
    VersionEditTabViewModel model = CreateTranslationsViewModel(id);
    return PartialView("Translations", model);
}

Теперь проблема в том, что на некоторых вкладках у меня есть форма, которая имеет элементы управления, которые вызывают событие отправки.

[HttpPost]
public ActionResult Translations(Guid id)
{
    FormCollection formCollection = new FormCollection(Request.Form);
    string message = string.Empty;
    int languageId = int.Parse(formCollection["TranslationsLanguageList"]);
    string action = formCollection["TranslationAction"];
    if(action == Constants.translation_save)
    {
        _translationModel.SaveTranslations(formCollection);
        message = "Translation information saved";
    }
    else if (action == Constants.translation_language_changed)
    {
/*
    PROBLEM: causes whole page to render, not partial
*/
        return PartialView("Translations", model);
    }
    return RedirectToAction( ... updates the complete page not only partial ...);
}

Мой вопрос:как сделать частичное из метода POST?Потому что теперь с этой вкладкой исходного кода содержимое будет загружено на ВЕСЬ страницу, а не внутри вкладки.

Решение

Мне пришлось поместить DIV вне Ajax.Form, а также у меня была неверная отправкав моем DropDownList.Я создал скрытую кнопку отправки с идентификатором Id, а затем использовал jQuery для запуска события click.

Ответы [ 2 ]

3 голосов
/ 22 июля 2010

Для дополнительной информации, пожалуйста, обратитесь к этому вопросу по SO:

MVC - Использование Ajax для частичного отображения

Это показывает полную реализацию Ajax.BeginForm с окружающим DIV и внутренними элементами управления.Вы должны иметь возможность поместить всю эту настройку (DIV + Form + HTML Form Elements) во вкладку Telerik, например:

<% Html.Telerik().TabStrip()
        .Name("TabStrip")
        .Items(tabstrip =>
        {
            tabstrip.Add()
                    .Text("Your Tab Text")
                    .Content(() =>
                    {%>
                        <div id="containerDiv" align="left">
                           <% using (Ajax.BeginForm("Example", "Controller/Action", new AjaxOptions { UpdateTargetId = "containerDiv" })){ %>
                           <%-- Render Partial here -->
                           <% } %>
                        </div>
                    <%});

Надеюсь, это поможет.

1 голос
/ 20 июля 2010

Я сделал свою форму через ajax:

using (Ajax.BeginForm("*ActionName*", new { *parameter = ID* }, new AjaxOptions { UpdateTargetId = (*div i will update*), OnSuccess = "*JavaScript that executes on success*", OnComplete = "s*ame as on success*", InsertionMode = InsertionMode.Replace }))

, а затем у меня есть

return PartialView("*PartialViewName*", model);

в посте Action

И он прекрасно работает, на постДействие возвращает частичное представление, а затем форма ajax заменяет содержимое div, указанного в UpdateTargetId, на InsertionMode.Replace

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