根据复选框

时间:2015-05-07 09:33:22

标签: c# asp.net-mvc email arraylist

我试图找到一种方法,根据是否已检查过他们的电子邮件,向选定的收件人发送电子邮件。我们有一个包含电子邮件的数据库,并且我已手动为结果表添加了一个复选框。点击"发送",我希望电子邮件根据他们是否已经过检查发送给这些人。

我认为最好的方法是创建 ArrayList ,然后使用 message.CC.Add(emailArray),但这会产生无效的参数。 然后我尝试了

string Email = emailArray.ToString() 
//and then 
message.CC.Add(email) 

没有提供错误,但它只发送给任何人点击按钮,IE本人或其他同事,并且不会添加CC。 SMTP等都是正确的,因为电子邮件将发送,而不是发送给被勾选的收件人。

ArrayList emailArray = new ArrayList();
                if (Request.Form["chkBox"].Equals(true))
                {
                    emailArray.Add(db.tblMailRecipients.Include(t => t.Email));
                }
                string email = emailArray.ToString();
                message.To.Add(email);
                smtp.Send(message);
                Response.Redirect("~/Home/Index");

上面的代码显示了我试图收到电子邮件并将其放入Arraylist的位置。

是否与我如何获取复选框值,然后将其与表格中的行相关联(或不?)?

我们正在使用带有C#的ASP.NET MVC。

任何帮助将不胜感激:)。

由于

更新 以下代码用于列出收件人的页面,其中包含以下复选框:

    @using (Html.BeginForm("SendEmail", "BulkMail", FormMethod.Post))
 { 
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.LastName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.FirstName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Email)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Company)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastEmailDate)
        </th>
        <th>
            Check
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.LastName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.FirstName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Email)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Company)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastEmailDate)
        </td>
        <td>
            <input id="chkBox" name="chkBox" type="checkbox" />
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.MailRecipientId }) |
            @Html.ActionLink("Details", "Details", new { id=item.MailRecipientId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.MailRecipientId })
        </td>
    </tr> 
}
</table>
    <input type="submit" value="Submit" />
}

此时此消息在发送邮件功能中进行了硬编码。

2 个答案:

答案 0 :(得分:1)

你有:

<input id="chkBox" name="chkBox" type="checkbox" />

foreach循环内,会重复id="chkBox",生成无效的HTML。

您应该做的是在模型中创建一个属性。例如

public bool isChecked {get;set;}

然后使用forloop显示您的模型:MVC模型绑定器要求字段采用以下格式:[0].PropertyName

    @for(var i =0; i < Model.Count(); i++) {
        <tr>
            <td>
              @Html.DisplayFor(m => m[i].LastName)
            </td>


...... Removed HTML
            <td>
                @Html.CheckBoxFor(m => m[i].isChecked)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=Model[i].MailRecipientId }) |
..... Removed HTML
            </td>
        </tr> 
    }

提交表格时:

[HttpPost]
public ActionResult SendEmail(List<CLASS_NAME> model)
{

var emails = model.Where(s => s.isChecked).Select(s => s.Email).ToArray();
............/////

}

答案 1 :(得分:1)

对于与此线程缺乏互动而道歉,还有其他需要的东西。首先,感谢您的帮助。我今天看了一下,想出了以下解决方案:

添加

<input type="checkbox" name="chkBox" value="@item.Email" />

进入可以选择电子邮件等的视图。然后我补充道:

message.Bcc.Add(Request.Form["chkBox"])

到SMTP等的控制器,它似乎工作得很好:)。

由于