Dynamic Orchard模块-如何从驱动程序返回强类型模型而不是动态模型
我创建了一个ContactUs模块,当用户点击提交按钮时发送电子邮件 一切都很完美。然而,我很好奇是否可以返回强类型模型而不是动态类 例如,以下是my Drivers\ContactUsDriver.cs显示功能: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
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));
}