asp.net mvc 如何将完整模型从视图传递到控制器

Ale*_*der 4 c# asp.net asp.net-mvc

我在视图中有这样的表

<table class='sendemailtable'>                
@if (!string.IsNullOrEmpty(Model.CustomerName))
{
<tr>
   <td style="font-size: 26px;">
   @Html.Label(string.Empty, Model.CustomerName)
   </td>
</tr>
}                   

<tr><td style="padding-top: 15px;">To:</td></tr>
<tr>
   <td>
   @Html.TextBoxFor(m => m.EmailTo)
   @Html.ValidationMessageFor(m => m.EmailTo);
   </td>
</tr>

<tr><td style="padding-top: 15px;">Subject:</td></tr>
<tr>
<td style="font-size: 22px;">
@Html.TextBoxFor(m => m.EmailBody)
</td>
</tr>

few more

<button style="..." type="submit">SEND</button>

</table>
Run Code Online (Sandbox Code Playgroud)

这些不是模型中的所有项目,它还有一些 ui 中不存在的 id,有一些只有 getter 的属性

    public int OfferID;
    public int SomeOfferID;
    public int CustomerID;

    #region Email

    [Required]
    [DataType(DataType.EmailAddress)]
    [RegularExpression(@"[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Incorrect email")]
    public string EmailTo;

    private string emailBodyDefault;
    public string EmailBody
    {
        get
        {
            if (string.IsNullOrEmpty(emailBodyDefault))
                emailBodyDefault = string.Format("Hi,{1}please take a look. Offer ID: {0}{1}{1}Thanks", SomeOfferID, Environment.NewLine);

            return emailBodyDefault;
        }

        set { emailBodyDefault = value; }
    }

    private string emailSubject;
    [Required]
    public string EmailSubject
    {
        get
        {
            if (string.IsNullOrEmpty(emailSubject))
                emailSubject = string.Format("Offer ID: {0}", SomeOfferID);

            return emailSubject;
        }

        set { emailSubject = value; }
    }

    #endregion
Run Code Online (Sandbox Code Playgroud)

我想将我的模型完整地传递给控制器​​,以便能够从控制器的操作中发送电子邮件。还需要验证用户的电子邮件,并且用户点击发送时主题非空。我怎样才能做到这一点 ?

mar*_*ith 5

如果您希望提交完整的模型,则需要在表单中包含所有模型属性。@Html.HiddenFor(m => m.YourPropertyName)如果您不想显示它们,您可以使用它来执行此操作。我在您的代码中没有看到任何表单标签,但我认为有一些?

您已经在使用 [Required] DataAnnotations 时对模型属性进行了验证,因此要在服务器端进行检查,您需要在将数据发布到控制器时检查 ModelState.Valid。

public ActionResult SubmitMyForm(MyModel model)
        {
            if (ModelState.IsValid)
            {
...
Run Code Online (Sandbox Code Playgroud)

回复评论:

表格看起来像这样:

@using (Html.BeginForm())
{
    <table>
    ...
    </table>
}
Run Code Online (Sandbox Code Playgroud)

发生错误是因为在using块内部,您不需要在 C# 代码前加上@. 请参阅此答案以获取解释。