asp.net-mvc – Sitecore MVC – 如何在页面上处理多个表单
我一直在寻找Sitecore MVC但我仍然坚持如何处理我的页面有两个控制器渲染并且每个包含一个表单的情况.我希望各个控制器处理他们的HttpPost并在发布后返回整个页面.
我已经建立了一个简单的例子.两个控制器类似: public class ExampleController : Sitecore.Mvc.Controllers.SitecoreController { public override ActionResult Index() { return View("Index"); } [HttpPost] public ActionResult Index(string formPostData) { ViewBag.SaveForLater = formPostData; return Index(); } } 视图看起来像这样: @using Sitecore.Mvc @using (Html.BeginRouteForm(Sitecore.Mvc.Configuration.MvcSettings.SitecoreRouteName,FormMethod.Post)) { @Html.AntiForgeryToken() var term = ViewBag.SaveForLater as string; if (!string.IsNullOrEmpty(term)) { <p>Submitted: @term</p> } <p> @Html.Sitecore().FormHandler("Example","Index") <input type="text" name="formPostData" placeholder="Enter something" /> <input type="submit" name="submit" value="Search" /> </p> } 使用此设置,两个表单都提交其数据,但返回的页面仅包含部分视图,而不是整个页面. 如果我用@ Html.Sitecore().FormHandler()替换@ Html.Sitecore().FormHandler(“Example”,“Index”)行,则返回整个页面,但处理两个表单的post动作. 这两种情况都不理想.我必须遗漏一些东西,并会欣赏指针. 解决方法
不幸的是,有多种方法可以与Sitecore MVC集成,而Sitecore没有提供许多最佳实践示例.一个例子你可以找到
here.
在我们的项目中,我们做的有点不同,因为我们希望尽可能多地使用默认ASP.NET MVC中的约定等.我试着在这篇文章中包含一个完整的简单例子. 我们使用当前操作和当前控制器向表单添加两个不同的隐藏字段,视图如下所示: @model Website.Models.TestViewModel @using (Html.BeginForm()) { @Html.LabelFor(model => model.Text) @Html.TextBoxFor(model => model.Text) <input type="submit" value="submit" /> <input type="hidden" name="fhController" value="TestController" /> <input type="hidden" name="fhAction" value="Index" /> } 有了这个简单的ViewModel: namespace Website.Models { public class TestViewModel { public string Text { get; set; } } } 然后我们创建了一个自定义属性,用于检查当前控制器/操作是否与发布的相同: public class ValidateFormHandler : ActionMethodSelectorAttribute { public override bool IsValidForRequest(ControllerContext controllerContext,MethodInfo methodInfo) { var controller = controllerContext.HttpContext.Request.Form["fhController"]; var action = controllerContext.HttpContext.Request.Form["fhAction"]; return !string.IsNullOrWhiteSpace(controller) && !string.IsNullOrWhiteSpace(action) && controller == controllerContext.Controller.GetType().Name && methodInfo.Name == action; } } 然后控制器操作获取新属性: namespace Website.Controllers { public class TestController : Controller { public ActionResult Index() { return View(); } [HttpPost] [ValidateFormHandler] public ActionResult Index(TestViewModel model) { return View(model); } } } 我们总是返回ASP.NET MVC解析的视图.按照惯例,这是与文件夹中具有与控制器同名的操作同名的视图. 这种方法对我们非常有效.如果你想添加 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- dependency-injection – 如何使用ASP.NET MVC 3 RTM配置依
- 何时在ASP.NET上选择LAMP?
- asp.net – 使用httpModule手动启用压缩
- asp.net-mvc – 如何与Entity Framework创建外键关系?
- asp.net-mvc-3 – MVC3 MapRoute,带斜杠的参数
- 防止在Asp.Net Core ViewComponents中加载多个JavaScript脚
- asp.net-mvc-3 – Asp.Net MVC 3 – @ Html.Action不会呈现
- asp.net – CSS文件引用了两次
- [你必须知道的.NET] 第五回:深入浅出关键字---把new说透
- 使ASP.Net(C#)Web应用程序可脱机使用
- asp.net – Facebook应用程序仅适用于管理员.为什
- asp.net-mvc – ASP.NET MVC Ajax.BeginForm不起
- Asp.Net(C#)内联编码Eval if语句
- ASP.NET MVC 2中的asp.net-mvc-2 – LazyList vs
- asp.net – OWIN的这些用法是否可行?
- asp.net – 如何使用DataReader填充DataTable
- asp.net-core – ASP.NET核心 – 在帖子后更改表
- asp.net-mvc – Fluent验证与默认的.NET数据注释
- asp.net – 如何在C#2.0中的Web.config中加密用户
- CORS支持PUT和DELETE与ASP.NET Web API