Sitecore 8.0(构建 3)MVC WFFM 自定义验证器不工作
Posted
技术标签:
【中文标题】Sitecore 8.0(构建 3)MVC WFFM 自定义验证器不工作【英文标题】:Sitecore 8.0 (build 3) MVC WFFM Custom Validator not working 【发布时间】:2016-07-09 03:54:40 【问题描述】:无法进入我在 Sitecore 8 MVC Web Form for Marketers 表单上构建的自定义验证器。
这是我用来构建验证器的步骤: 1) 我创建了一个 C# 应用程序 (.NET 4.5),并构建了用于文件验证的 dll。构建,将 .DLL 复制到 Bin 目录。在我们拥有的 Sitecore 6.6 站点中可以正常工作,但在 sitecore 8.0 站点中则无法正常工作。
这是验证代码(我修改为将 args.IsValid 设置为 false 以进行测试)。
namespace SitecoreUtilities.UploadFile
public class RestrictSize : FormCustomValidator
public int MaxFileSize
get
int maxSize;
if (int.TryParse(base.classAttributes["MaxFileSize"], out maxSize))
return maxSize;
return 0;
set
base.classAttributes["MaxFileSize"] = value.ToString();
public RestrictSize()
this.ServerValidate += this.OnSizeValidate;
private void OnSizeValidate(object source, ServerValidateEventArgs args)
FileUpload fileUpload = FindControl(ControlToValidate) as FileUpload;
if (!fileUpload.HasFile)
args.IsValid=true;
return;
args.IsValid = fileUpload.PostedFile.ContentLength <= MaxFileSize;
args.IsValid = false; // TESTING to confirm getting in here
2) 创建了新的验证器: 位置:sitecore/system/Modules/Web Forms for Marketing/Settings/Validation/FileUpload/AllowedFileSize
程序集:SitecoreUtilities 类:SitecoreUtilities.UploadFile.RestrictSize MVC 类型:空白 验证器显示:动态 启用客户端脚本:选中 参数:我放在实际项目上时为空 本地化参数:空 内部控制:选中3) 为字段类型/简单类型/文件上传项添加验证器
4) 将文件上传添加到表单域:
5) 已保存,已发布.. 无法在网站上工作。
顺便说一句,我在我的机器上的 IIS 7.5 中建立了一个 local.test.org 站点,然后在 Visual Studio 中进入项目并附加到 W3Wp,但它没有进入应用程序。
如果我错过了此部署的步骤,请告知。
更新 1:在标题中添加了 MVC更新 2:添加了我的代码与 https://doc.sitecore.net/web_forms_for_marketers/working_with_actions_and_validations/validations/walkthrough_create_and_assign_a_custom_fieldtype_validator 之间的每个代码差异的 C# 代码。
【问题讨论】:
你的表单是不是 MVC 表单? 如果您的代码在 v6 中工作,它可能无法在 v8 中工作,因为 wffm 中的这些版本之间发生了一些变化...您能否检查 doc.sitecore.net/web_forms_for_marketers/… 并查看它是否符合您的代码和设置? 感谢 Gatogordo 的回复。 1)是的MVC(我更新了主题)。如果在验证器中将该字段留空时进行查询,我只是模仿其他验证器,因为它是空的。 2)感谢您发送该链接。我只是对代码做了一些调整,甚至强制 args.IsValid 为 false,仍然没有点击编辑。 对于 MVC 表单,您应该阅读以下内容:ggullentops.blogspot.be/2016/05/… 与 Web 表单相比,它的工作方式有点不同.. 【参考方案1】:对于 WFFM MVC 表单,您需要使用验证属性。我写了一个例子here的博客文章。使用的示例也用于文件上传,因此应该是相关的。它归结为创建一个继承自DynamicValidationBase
的属性。您还需要创建一个新字段,只需添加属性 - 您不需要在那里编写新代码。
博客中的代码适用于 Sitecore 8.1。与 8.0 可能存在一些细微差别。
【讨论】:
Thx Gatogordo,这似乎解决方案适用于 8.1,但是我在 Sitecore.Forms.Mvc 8.0.0 .dll 中看不到 Sitecore.Forms.Mvc.ViewModels.Fields。当我查看@ Sitecore 中的日志时,我看到此消息:消息:无法从程序集“Sitecore.Forms.Mvc,版本=8.0.0.0,文化=中性”加载类型“Sitecore.Forms.Mvc.ViewModels.Fields.FileUploadField” , PublicKeyToken=null'。 在 8.0 中它们位于Sitecore.Forms.Mvc.Models.Fields
知道 IViewModel 位于哪个命名空间。接收找不到类型或命名空间名称“IViewModel”(您是否缺少 using 指令或程序集引用?)。另外,如果您知道找到这个的最佳方法请分享。
使用任何反编译器。我使用 dotPeek,但还有其他的也可以完成这项工作。
8.1 更稳定——如果你可以升级那将是一个不错的选择以上是关于Sitecore 8.0(构建 3)MVC WFFM 自定义验证器不工作的主要内容,如果未能解决你的问题,请参考以下文章
Sitecore 7.5 的 MVC 检测和 WebApi 属性路由
Sitecore:在配置 LightLDAP.SitecoreADRoleProvider 时使用集成安全性
无法通过单元测试中的 Sitecore 上下文访问 Sitecore 模拟项目(MS Fakes)