我正在尝试使用episerver xform执行客户端表单验证,编译后的html看起来像这样:http://codepen.io/anon/pen/ojGGJw有关于如何实现这一点的指导吗?我正在考虑使用.validate库,但是如果我们通过epi添加一个新的控件到窗体中,我会有一个问题。此外,我还尝试使用AJAX调用,如下所示:
$.ajax({
url: "/industry/XFormPost?XFormId=0643b992-56c6-40a5-91eb-c557443630e0&failedAction=Failed&successAction=Success&contentId=36",
data: $(this).serialize(),
type: "POST",
success: function () {
alert('Hello this is a valid form');
}
});它会触发事件,但不会将我的表单保存到数据库中。即使我传递的所有字段都是有效的
发布于 2015-10-19 16:15:18
遗憾的是,在目前的状态下,当涉及到定制时,使用XForms是出了名的麻烦。对于自定义渲染和/或验证,我们通常完全实现我们自己的渲染。
有许多关于如何实现它的文章,但它可能很耗时。:/
当然,客户端验证只能通过将事件处理程序附加到默认生成的HTML来实现,但这通常是不够的。虽然这可以与服务器端事件结合在一起,但如果没有自定义呈现,则很难正确地为最终用户定制XForms的工作方式。
发布于 2015-10-28 01:17:02
下面是我最终要做的,使用.validate() js库为我的表单包含一个完整的客户端验证。我相信还有其他方法可以做到这一点,所以这是我的版本:
EpiServer有一个类字段,您可以将其用于所有控件(顺便说一句,遗憾的是没有隐藏字段,但这是另一回事)。因此,我添加了一个名为'requiredField'的css类,并为不同类型的验证添加了额外的类,例如用于电子邮件验证的'emailField'和用于表单CSS布局的'halfWidthField'。

为了让.Validate正常工作,我需要添加必要的属性。为了实现这一点,我创建了一个小脚本,根据我已经分配的类名添加这些属性。我的JS代码看起来像这样:
$(".contact-form").find(".requiredfield").each(function () {
$(this).prop('required', true);
});
$(".contact-form").find(".emailfield").each(function () {
$(this).attr('type', 'email');
});最后:为了实现ajax调用,我更改了视图,并进行了Ajax调用,而不是常规的post调用。
@using (Ajax.BeginForm("", "",
new AjaxOptions
{
HttpMethod = "POST",
Url = Model.ActionUri
}
))
{
Html.RenderXForm(Model.Form);
}它按照预期工作,我可以根据需要定制验证。最终的表单如下所示:

https://stackoverflow.com/questions/33138265
复制相似问题