想知道是否有人可以帮助我......
基本上我想要做的就是在发布表单时,我正在做一些自定义验证,如果提交的数据不符合业务,那么我想停止处理(显然!并将传入的模型传递回包含表单的视图,以便用户不必重新键入所有数据。
我设置的方式是(这是使用Umbraco作为CMS):
1)我创建了模型/属性。 2)然后我创建了一个强类型的局部视图,并选择了我刚刚创建的模型类(名为AwardsCeremony) 3)然后我创建了一个带有以下Index ActionResult的控制器:
public ActionResult Index()
{
TempData["priceList"] = getPrices();
TempData["qualificationList"] = getQualifications();
return PartialView("AwardsCeremony", new AwardsCeremonyViewModel());
}
4)然后在Umbraco模板中我正在调用控制器
@Html.Action("Index", "AwardsCeremonySurface")
(这个umbraco从Master模板(在Umbraco中)继承了它的造型等。)。
在视图中(在HTTPPOST事件上)我在控制器上调用processBooking actionresult。
@using (Html.BeginUmbracoForm("processBooking", "AwardsCeremonySurface", null, new { @class = "form-horizontal" }))
然后,这个ActionResult会进行错误检查,这就是问题开始的地方(!),为了便于阅读,我删除了自定义验证。
[HttpPost]
public ActionResult processBooking(AwardsCeremonyViewModel model)
{
//Do the custom error handling
if (myInvalidForm == true)
{
return PartialView("AwardsCeremony",model);
}
//Process the booking
return RedirectToCurrentUmbracoPage();
}
发生的事情是,当返回部分视图时,页面样式丢失,表单显示但没有Umbraco Master模板中的继承样式,类等,我只是不知道如何固定。有人能指出我正确的方向吗?
谢谢, 克雷格
答案 0 :(得分:0)
在Umbraco中实现表单(基于我的一个项目中的代码 - 您在HandleContactUs
中的表单处理很可能会有所不同):
模型只是标准的MVC。
控制器:
public class FormsController : SurfaceController
{
[ChildActionOnly]
public ActionResult ContactUs()
{
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
HtmlHelper.ClientValidationEnabled = true;
ContactForm model = null;
if (TempData.ContainsKey("ContactForm"))
{
model = TempData["ContactForm"] as ContactForm;
}
if (model == null)
{
model = new ContactForm { Page = CurrentPage };
}
return PartialView(model);
}
[HttpPost]
public ActionResult HandleContactUs(ContactForm model)
{
if (ModelState.IsValid)
{
string errorMsg = string.Empty;
TempData["ContactFormSuccess"] = model.SendMail(Umbraco, out errorMsg);
TempData["ContactFormErrorMessage"] = errorMsg;
}
else
{
TempData["ContactFormSuccess"] = false;
}
TempData["ContactForm"] = model;
if (!Request.IsAjaxRequest())
RedirectToCurrentUmbracoUrl();
return PartialView(model);
}
}
备注强>:
ContactUs
操作呈现,同时由HandleContactUs
发布操作处理。RedirectToUmbracoUrl()
否则我们只返回部分视图,因为我们使用javascript将表单替换为处理后的视图(通常是感谢你留言等。)Surface
- 虽然文档仍然表明您这样做,但它已经在一段时间之前被删除了。观点:
〜\视图\形式\ ContactUs.cshtml:
使用标准的UmbracoBeginForm:
@using (Html.BeginUmbracoForm<FormsController>("HandleContactUs", null,
new { @class = "form-horizontal" }))
{
}
使用MS MVC Ajax.BeginForm:
@using (Ajax.BeginForm("HandleContactUs", "Forms", null,
new AjaxOptions { UpdateTargetId = "contactForm",
OnBegin = "contactBegin",
OnFailure = "contactFailure" },
new { @class = "form-horizontal" }) )
{
}
当然,您还需要javascript回调函数contactBegin
,contactFailure
或者您的AjaxOptions配置。
我已经在几个项目中使用了这种方法而没有任何问题。
答案 1 :(得分:-1)
当然造型丢失了。您确实将部分视图作为响应返回,而不包括您的站点布局。您想要返回完整的default_charset = "iso-8859-1";
,即ViewResult
,该视图应与您用于GET操作的视图相同,而不是部分视图。