故障排除

    你可能使用了无效的解决方案名称,如 MyProject.Something (包含点’.’)。

    当项目以这种方式命名时,模板系统将不能定位模板。

    请不要在解决方案名称中使用点符号(’.’),如果必须使用点符号,可在创建解决方案之后再重命名。

    编译错误

    在 Script 项目添加文件后,得到几个引用不明确的错误:

    从 script 项目移除 System.dll 引用。Visual Studio 在使用 添加新文件 对话框时会添加该引用,而 Saltarelle 编译器不能与该程序集一起工作,因为它有完全不一样的运行时。

    在 Script 项目中,请使用复制/粘贴的方式创建代码文件。

    Error: System.ComponentModel.DisplayName attribute exists in both …\Serenity.Script.UI.dll and …\v2.0…\System.dll

    与上面一样,从 Script 项目移除 System.dll 引用。

    运行时错误

    当上传文件或添加备注(notes)时,得到 NotImplementException 的异常:

    该功能需要表的标识列是整数。在最近版本的 Serenity 中,已添加对 String/Guid 主键的支持,但一些旧行为(old behaviors)不能与这种键一起工作。

    当我在网格列表切换页时,得到错误:”‘OFFSET’ 附近语法错误,在 FETCH 声明中使用无效 NEXT 项 “:

    你的 SQL server 是 2008 或更旧的版本。默认情况下,SQL Server 连接使用 SQL2012 方言。在 SiteInitialization.cs 中把连接修改为 SqlServer2005 或 SqlServer2008 方言,如:

    T4 模板问题

    在转换模板后,发现枚举不能被转换到脚本端:

    如果你在行(row)或者请求/响应服务中使用枚举类型,枚举会被转换,否则默认情况下,枚举不会被转换。如果此时你需要包含该枚举,请向其添加 [ScriptInclude] 特性。

    编辑器和表单

    试图设置级联下拉列表,但第二个下拉列表始终为空:

    确保你正确地设置了 CascadeField,CascadeField 应该匹配第二检索的属性名称。例如,CountryID 在脚本端没有匹配 CountryId 。你可以使用 nameof() 操作确认,如 CascadeField = nameof(CityRow.CountryId) 。

    另一种可能性是 CascadeField 没有包括在发送到脚本端的检索数据中。例如,如果第二个下拉列表是城市,通过 CountryId 与国家下拉列表对应,请确保 CityRow 的 CountryId 属性有 [LookupInclude] 特性。默认情况下,只有 ID 和 Name 属性被发送到脚本端进行检索。


    试图使用对话框模板创建选项卡,但是选项卡不能显示或是空的:

    确保你没有把选项卡内容放到另一选项卡内容中,如 选项卡 DIV 包含在其他选项卡的 DIV 内。

    在内存中创建类似于 Movie 教程的演员编辑器的主从信息,但是更新记录时,我得到两条重复的实体:

    确保 EditDialog 类没有 [IdProperty] 。因为编辑对话框的记录是在内存中操作,此时该记录还没有实际的 ID,如果你对它们使用实际的 ID 属性,对话框会认为你在编辑时要添加新记录(由于它们的实际 ID 总为 null)。

    正如你看到下面的代码,GridEditorDialog 基类使用伪造 ID:

    因此,当你在编辑对话框中设置 [IdProperty],你是在重写该伪造 ID 并导致不可预料的行为。


    在成功地添加详细信息后,打开一个现有记录,发现某些可视字段(view fields)为空:

    请在 YourDetailRow.cs 的可视字段添加 [MinSelectLevel(SelectLevel.List)] 特性。默认情况下,List handlers 和 MasterDetailBehavior 只加载详细行的表字段(没有可视字段)。

    权限

    页面不会显示在导航中

    Page 的访问权限是读取 XYZPage.cs 文件 Index 操作的 PageAuthorize 特性,这是一个 MVC 页面控制器。请确保你将此设置为用户权限。


    已经在 PermissionKeys.cs 添加了权限,但是不能在权限对话框显示它:

    PermissionKeys 类仅作为智能感智的目的。更多关于注册 keys 的信息请查看下面连接。


    在 row 中修改访问许可键(permission keys),但是当打开页面时得到错误且没有显示记录:

    XYZEndpoint.cs 也需要有 [ServiceAuthorize(“SomePermission”)] 特性。这是为了提供中等级别的安全(secondary level security)。在 Row 中替换访问键。

    本地化

    把翻译的文件保存到 ~/App_Data 目录下。将这些文件复制到服务器,或将相关文本文件移动到 ~/Scripts/site/texts 下。


    已经添加了自定义本地文本键,但是不能在脚本端访问它们:

    不是所有的翻译都会转换到脚本端。在 web.config 有一个控制着这些前缀的 LocalTextPackages 键设置。如果查看该配置,你可以看到只有以 Db.Dialogs.Forms. 等开头的文本键会被转换到客户端。这是为了限制大小的文本,因为不是所有的脚本代码都会使用这些文本。

    请在该配置中添加你自己的前缀,或者把你的文本键更改为以其中的默认前缀开头。


    更新 Select2 后,得到一些错误:

    请不要把 Select2 更新到 3.5.1+ 的版本,它最近的版本有一些已知的兼容性问题。

    把 Select2 还原到 Select2 3.5.1,请在包管理器控制台输入下面指令:

    部署与发布

    发布项目之后,一些内容找不到或不能显示:

    如果你使用 Visual Studio 发布,确保 css、图片文件等被包含在 web 项目,并且把它们的 生成操作 属性设置为 内容

    另一种可能是 IIS_IUSRS 用户组不能访问文件。检查其是否有访问 web 文件夹(发布的文件夹)权限。


    发布之后,找不到表(如 User):

    Serene 有一个避免在任意的数据库上运行迁移的检查。在 SiteInitialization.Migrations 文件的 RunMigrations 方法中可找到该检查,删除该检查。


    得到 “不能设置常量字段” 的 FieldAccessExceptions:

    托管服务提供商已将你的 web 应用程序池设置为中等信任安全等级。请要求他们授予高度信任安全等级,或考虑更换供应商。

    如果你的托管服务提供商没有锁住 web.config,也可以在 web.config 设置: