Ajax.BeginForm发布到表面控制器,并以整页而不是部分视图更新目标id

本文关键字:视图 id 目标 更新 BeginForm 表面 控制器 Ajax | 更新日期: 2023-09-27 18:01:17

一直在尝试获得与ajax一起工作的成员配置文件管理区域,因为页面的每个部分都隐藏在显示隐藏div中。

我以前在MVC应用程序中使用过ajax,但以前从未与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>

我还确保在web中将UnobtrusiveJavaScriptEnabled设置为true。配置,但我仍然得到一个完整的页面渲染时,我张贴的形式。

最初

:当页面加载并且表单显示

后:当提交表单并返回正确的部分视图时,但是在整个

我花了两个多小时来研究这个,尽管它显然在某种程度上起作用,我还是觉得很傻。

这是可能/已知的事情发生吗?我四处搜索,但找不到任何类似问题的话题,除非我只是措辞错误。

如果有人有什么想法,我只是在寻找正确的方向?

Ajax.BeginForm发布到表面控制器,并以整页而不是部分视图更新目标id

Umbraco可以用偏导数来搞笑。尝试在控制器中返回currentumbracpage()。

对于消息,您可以使用TempData,因为它只持续一个请求,而不是模型。