【发布时间】:2016-08-08 19:12:31
【问题描述】:
由于页面的每个部分都隐藏在 show hide div 中,因此一直在尝试让成员配置文件管理区域使用 ajax。
我之前在 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.config 中将 UnobtrusiveJavaScriptEnabled 设置为 true,但是当我发布表单时,我仍然会得到一个完整的页面。
最初: When the page loads and the form shows
之后: When the form is submitted and the correct partial view is returned but inside of an entire
尽管它显然以某种方式工作,但我花了几个小时来研究这个问题,我感到非常震惊。
这有可能/已知的事情发生吗?我四处搜索,但找不到任何具有类似问题的主题,除非我只是措辞有误。
如果有人有任何想法,只是在寻找正确的方向?
【问题讨论】:
-
替换html的html元素在哪里?
-
它位于继承 Umbraco.Web.Mvc.UmbracoTemplatePage 的模板内。这真的是 div 的唯一特别之处,无论如何这有帮助吗?
-
您的 ajax 表单视图是否已加载到该 div 中?
-
是的,我想要的部分视图确实被加载到该 div 中,但与站点的其余部分一起,好像它有一个布局,但我特别尝试在之前放置 layout = null 但是什么目前正在发生 仍然发生。
标签: c# ajax umbraco umbraco7 surface-controller