Asp.net mvc umbraco mvc地面控制器,can';t从HttpPost操作返回视图 问题概述:
我用@Html.action(…)创建了一个表面控制器,该控制器使用一个调用的动作 @Html.Action调用在宏局部视图中完成,宏包含在使用富文本编辑器的页面内容中 (我是新来的,所以如果我做错了事情,请让我知道。) 曲面控制器有一个GET和一个POST动作,但它是在宏partial中调用的GET动作 Get action渲染很好,在表单中输入任何数据都将使模型状态无效(这是我目前正在测试的) 提交表单(没有输入数据)意味着我可以进入POST操作,ModelState.IsValid设置为false,并返回CurrentUmbracoPage() 一切都好。。。调试时未遇到异常 此时页面上会出现错误文本“加载部分视图脚本时出错” 我所要做的就是返回相同的页面,并显示验证消息 细节: 翁布拉科v6.0.5 我当前使用的控制器用于重置用户密码。我还有一个登录控制器,它通过使用RedirectToCurrentUmbracoPage()绕过了这个问题 要访问包含宏的页面,我使用地址http://{testhost}/Reset Password 返回的错误文本为:加载部分视图脚本时出错(文件:~/Views/MacroPartials/ResetPassword.cshtml) 代码在一个单独的解决方案中,视图和bin目录被交叉复制。 nuget包UmbracoCMS。使用脚手架 控制器代码: 视图-~\Views\ResetPasswordSurface\Reset.cshtml: 感谢您的帮助 编辑: 从重置操作中删除[HttpGet]属性表明,在调用PostReset操作之后,也将调用重置操作 将PostReset重命名为Reset并将httpget属性重新添加到原始重置操作会导致调用两次post操作。 第二次调用它会导致异常: 使用SurfaceControl表单时,只能在Http POST上下文中使用UmbracoPageResult 我已经恢复了更改,因此在PostReset操作后调用Reset([HttpGet]) 因此,问题仍然存在。我怎样才能避开这个问题?Asp.net mvc umbraco mvc地面控制器,can';t从HttpPost操作返回视图 问题概述:,asp.net-mvc,forms,http-post,umbraco,Asp.net Mvc,Forms,Http Post,Umbraco,我用@Html.action(…)创建了一个表面控制器,该控制器使用一个调用的动作 @Html.Action调用在宏局部视图中完成,宏包含在使用富文本编辑器的页面内容中 (我是新来的,所以如果我做错了事情,请让我知道。) 曲面控制器有一个GET和一个POST动作,但它是在宏partial中调用的GET动作 Get action渲染很好,在表单中输入任何数据都将使模型状态无效(这是我目前正在测试的) 提交表单(没有输入数据)意味着我可以进入POST操作,ModelState.IsValid设置为f
我需要返回PostReset操作的结果。答案已提供给我 所有的功劳都归于香农·德米尼克 post操作不会为响应返回任何内容(这对我来说是新的)。 第二次运行重置操作时,在post之后,由于维护了modelstate,因此通过传递新实例化的模型,此模型将继承post操作(PostReset)中处理的模型的模型状态 在第二次调用重置操作时,验证逻辑意味着它永远不会返回部分视图
我暂时绕过了验证逻辑,果然显示了模型验证消息。我就是这样解决这个问题的:
public static class ExtensionMethods
{
public static void MapModel<T>(this WebViewPage<T> page) where T : class
{
var models = page.ViewContext.TempData.Where(item => item.Value is T);
if (models.Any())
{
page.ViewData.Model = (T)models.First().Value;
page.ViewContext.TempData.Remove(models.First().Key);
}
}
}
@using UmbracoTest.Extension
@using UmbracoTest.Models
@model MyModel
@{
this.MapModel<MyModel>();
}
@using (Html.BeginUmbracoForm("Index", "Home", FormMethod.Post))
{
<div>
@Html.TextBox("Text", Model.Text )
</div>
<input type="submit" name="submit" value="Submit" />
}
@使用UmbracoTest.Extension
@使用UmbracoTest.Models
@模型MyModel
@{
这个.MapModel();
}
@使用(Html.BeginUmbracoForm(“Index”,“Home”,FormMethod.Post))
{
@TextBox(“Text”,Model.Text)
}
我通过解决命名冲突修复了此错误:
- 确保GET和POST方法的命名不同
- 确保控制器名称与任何文档类型都不冲突
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@Html.Action("Reset", "ResetPasswordSurface")
public static class ExtensionMethods
{
public static void MapModel<T>(this WebViewPage<T> page) where T : class
{
var models = page.ViewContext.TempData.Where(item => item.Value is T);
if (models.Any())
{
page.ViewData.Model = (T)models.First().Value;
page.ViewContext.TempData.Remove(models.First().Key);
}
}
}
[HttpPost]
public ActionResult Index(MyModel model)
{
TempData.Add("MyModel", model);
return RedirectToCurrentUmbracoPage();
}
@using UmbracoTest.Extension
@using UmbracoTest.Models
@model MyModel
@{
this.MapModel<MyModel>();
}
@using (Html.BeginUmbracoForm("Index", "Home", FormMethod.Post))
{
<div>
@Html.TextBox("Text", Model.Text )
</div>
<input type="submit" name="submit" value="Submit" />
}