3

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

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

例如,下面是我的 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。

现在,这是我的 Views\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 动态。结果,我必须执行以下操作

@Html.TextBox("Name", "")

有没有一种方法可以绑定到 Model 说 ContactUsModel 并因此执行以下操作?

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

特别是,我很感兴趣,所以我可以用 DataAnnotation 属性编写一个 jquery 验证。

4

1 回答 1

3

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

protected override DriverResult Display(
    ContactUsPart part, 
    string displayType, 
    dynamic shapeHelper)
{
    return ContentShape("Parts_ContactUs", 
       () => shapeHelper.Parts_ContactUs(typeof(MyClass), Name: part.Name));
}
于 2013-05-10T11:23:19.570 回答