【发布时间】:2012-01-16 08:37:30
【问题描述】:
我有一个使用 ContentPart 创建的简单小部件。 ContentPart 具有适当的驱动程序,小部件可以放置在我的 Orchard 站点的任何位置,并且一切正常! Widget 需要从用户那里捕获一些数据,对其进行验证、处理,然后在 Widget 中显示成功响应。
为了实现这一点,我定义了一个控制器,它接受一个 POST 请求,该请求将处理模型并在它无效时返回相同的 MyForm 视图,如果它有效则返回 FormSuccess 视图。 Widget Part 模板使用@Html.Partial("MyForm") 来显示包含Ajax 表单的MyForm 视图,该表单将使用POST 响应更新它包含的div。控制器将根据数据返回 MyForm 视图或 FormSuccess 视图。
我遇到的问题是我的设计师需要覆盖 MyForm 视图和 FormSuccess 视图的部分视图,他可以轻松地覆盖部分显示模板,但不能覆盖部分视图。
我认为目前这不可能的原因是因为我使用的是@Html.Partial("MyForm")。我发现如果我改用@Display(New.MyForm()),我可以通过在当前主题的 Views 文件夹中创建一个名为 MyForm.cshtml 的文件来覆盖 MyForm 视图,这正是我所需要的,但我该如何做控制器动作中的@Display?
目前我正在做return this.PartialView("MyForm", model) 或return this.PartialView("FormSuccess"),这将使用原始视图而不是被覆盖的视图。我注意到有一个 ShapeResult 但我不确定这是否正确,我不知道如何生成动态构造函数参数。理想情况下,我还需要 MyForm 视图有一个强类型模型,以便我可以使用 HtmlHelper 方法 LabelFor、TextboxFor 和 ValidationMessageFor,当模型是动态模型时这是不可能的?
以前有没有人做过类似的事情,或者任何人都可以提供任何指导吗?
谢谢, 杰森
【问题讨论】:
标签: widget orchardcms