Dynamic Orchard模块-如何从驱动程序返回强类型模型而不是动态模型

Dynamic Orchard模块-如何从驱动程序返回强类型模型而不是动态模型,dynamic,data-annotations,orchardcms,orchardcms-1.6,Dynamic,Data Annotations,Orchardcms,Orchardcms 1.6,我创建了一个ContactUs模块,当用户点击提交按钮时发送电子邮件 一切都很完美。然而,我很好奇是否可以返回强类型模型而不是动态类 例如,以下是my Drivers\ContactUsDriver.cs显示功能: protected override DriverResult Display(ContactUsPart part, string displayType, dynamic shapeHelper) { return ContentShape("Parts_Cont

我创建了一个ContactUs模块,当用户点击提交按钮时发送电子邮件

一切都很完美。然而,我很好奇是否可以返回强类型模型而不是动态类

例如,以下是my Drivers\ContactUsDriver.cs显示功能:

protected override DriverResult Display(ContactUsPart part, string displayType, dynamic shapeHelper)
{
        return ContentShape("Parts_ContactUs", 
           () => shapeHelper.Parts_ContactUs(
                 Name: part.Name));
}
正如您所看到的,上面返回的是一个动态部件

现在,这里是我的视图\Parts\ContactUs.cshtml的快照:

@model dynamic

@using (Html.BeginForm("Send", "ContactUs", new { area = "ContactUs" }, FormMethod.Post))
{
    <fieldset>
        <legend>Contact Us</legend>
        <div id="contact-us" class="area">
            @Html.TextBox("Name", "")
        </div>
        <div id="submitArea" class="button">       
            <input type="submit" value="Submit Message">
        </div>
    </fieldset>
}
有没有一种方法可以绑定到Model,比如ContactUsModel,从而执行以下操作

@Html.TextBoxFor(m => m.Name)

特别是,我很感兴趣,因此我可以使用DataAnnotation属性编写jquery验证。

这是完全可能的。创建形状时,只需提供所需的模型类型作为第一个参数:

protected override DriverResult Display(
    ContactUsPart part, 
    string displayType, 
    dynamic shapeHelper)
{
    return ContentShape("Parts_ContactUs", 
       () => shapeHelper.Parts_ContactUs(typeof(MyClass), Name: part.Name));
}

旁注:请注意,这需要从
Orchard.DisplayManagement.Shapes.Shape
继承
MyClass
,或者至少需要实现
IShape
,并且当
Name
MyClass
的实际属性时,由于以下问题,它在视图中将为空(仍然是Orchard 1.10.1中的一个问题,今天又遇到了同样的困难):
protected override DriverResult Display(
    ContactUsPart part, 
    string displayType, 
    dynamic shapeHelper)
{
    return ContentShape("Parts_ContactUs", 
       () => shapeHelper.Parts_ContactUs(typeof(MyClass), Name: part.Name));
}