Ajax.BeginForm отправляет сообщения на контроллер поверхности и обновляет целевой идентификатор с полной страницей вместо частичного просмотра

Пытались заставить область управления профилем участника работать с ajax, так как каждый раздел страницы скрыт внутри show show div.

Я раньше использовал ajax в приложениях MVC, но никогда раньше не использовал его с контроллерами umbraco. Я не уверен, почему возвращение частичного представления в контроллере приводит к выводу всей страницы, а не только частичного представления, которое я даю ей.

контроллер:

        [HttpPost]
        [ActionName("MvcMemberEditProfileDetails")]
        public ActionResult MvcMemberEditProfileDetails(MvcMemberEditProfileDetailsModel model)
        {

            var memberService = Services.MemberService;
            var currentUser = Membership.GetUser();
            var member = memberService.GetByEmail(currentUser.Email);

            bool result = false;

            if (ModelState.IsValid)
            {

                ...

            }

            if (result)
            {
                ...
            }


            return PartialView("MvcMemberEditProfileDetails", model);

        }

Посмотреть:

@model Umbraco714.Models.MvcMemberEditProfileDetailsModel


@using (Ajax.BeginForm("MvcMemberEditProfileDetails", "MvcMember", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "MvcMemberEditProfileDetails", InsertionMode = InsertionMode.Replace }))
{

    if (Model.Result != null)
    {

        if (Model.Result == true)
        {

            <div id="result" class="alert alert-success">
                @Html.Raw(Model.ResultMessage)
            </div>

        }
        else
        {

            <div id="result" class="alert alert-danger">
                @Html.Raw(Model.ResultMessage)
            </div>

        }

    }

    <div class="form-default">
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    @Html.LabelFor(m => m.FirstName)
                    @Html.TextBoxFor(m => m.FirstName)
                    @Html.ValidationMessageFor(m => m.FirstName)
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    @Html.LabelFor(m => m.LastName)
                    @Html.TextBoxFor(m => m.LastName)
                    @Html.ValidationMessageFor(m => m.LastName)
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    @Html.LabelFor(m => m.CompanyName)
                    @Html.TextBoxFor(m => m.CompanyName)
                    @Html.ValidationMessageFor(m => m.CompanyName)
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    @Html.LabelFor(m => m.CompanyPosition)
                    @Html.TextBoxFor(m => m.CompanyPosition)
                    @Html.ValidationMessageFor(m => m.CompanyPosition)
                </div>
            </div>
            <div class="col-xs-12">
                <div class="form-group">
                    @Html.LabelFor(m => m.CompanyBio)
                    <span class="bs-tooltip" data-toggle="tooltip" data-placement="top" title="Max 1000 characters long"><i class="fa fa-info-circle" aria-hidden="true"></i></span>

                    @Html.TextAreaFor(m => m.CompanyBio, new { @rows = "4", @maxlength = "1000" })
                    @Html.ValidationMessageFor(m => m.CompanyBio)
                </div>

                @TempData["Status"]
                <div class="form-group nomargin">

                    <div class="text-right">

                        <button class="button" type="submit"><i class="fa fa-floppy-o" aria-hidden="true"></i> Update</button>

                    </div>

                </div>
            </div>

        </div>
    </div>

}

У меня есть все, что должно быть включено (насколько я знаю) задолго до формы и нет ошибок консоли.

    <script src="/scripts/jquery.js"></script>
    <script src="/scripts/bootstrap.min.js"></script>
    <script src="/scripts/jquery-val.js"></script>

    <script src="/scripts/jquery.unobtrusive-ajax.min.js"></script>

Я также удостоверился, что UnobtrusiveJavaScriptEnabled установлен в true в web.config, но я все еще получаю полную страницу, отображаемую, когда я публикую форму.

Первоначально: когда страница загружается и отображается форма

После: когда форма отправлена ​​и возвращено правильное частичное представление, но внутри целого

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

Возможно ли / известная вещь, чтобы это произошло? Я искал вокруг, но не мог найти какие-либо темы с похожей проблемой, если только я просто не формулировал вещи неправильно.

Просто ищите толчок в правильном направлении, если у кого-нибудь есть идеи?

1 ответ

Умбрако может быть смешным с частями. Попробуйте вернуть CurrentUmbracoPage() в контроллер.

Что касается сообщения, вы можете использовать TempData, поскольку оно длится только один запрос, а не модель.

Другие вопросы по тегам