Formview не позволяет мне добавить вторую запись после добавления первой
У меня есть FormView, который позволяет вставлять записи в таблицу, а затем также отправляет подтверждение по электронной почте, что запись была добавлена. Предполагается, что электронное письмо отправляется определенному набору пользователей в зависимости от выбранного отдела. Итак, у меня есть ниже. Все работает хорошо, за исключением того, что я добавляю запись и отправляю электронное письмо, а затем он возвращает меня обратно, и когда я снова нажимаю кнопку Добавить новую запись, я получаю "Не удалось найти элемент управления" formViewNewItem$ddlInsertDepartment'в ControlParameter 'RoleID',"Это похоже на то, что formView остается в режиме вставки или в каком-то другом месте после вставки записи в таблицу.
Источник данных для отправки электронных писем:
<asp:SqlDataSource ID="dsourceToEmails" runat="server"
ConnectionString="<%$ ConnectionStrings:TestConnectionString %>"
SelectCommand="SELECT [Email] + ',' FROM [Users] WHERE [Role] = @RoleID FOR XML PATH ('')">
</asp:SqlDataSource>
Код FormView:
<asp:FormView ID="formViewNewItem" runat="server" DataKeyNames="Test_ID"
DataSourceID="testDataSource" OnDataBound="formViewNewItem_DataBound"
OnItemInserted="testRecord_Inserted">
<InsertItemTemplate>
<asp:DropDownList ID="ddlInsertDepartment" runat="server" ClientIDMode="Static">
<asp:ListItem></asp:ListItem>
<asp:ListItem>Accounting</asp:ListItem>
<asp:ListItem>Marketing</asp:ListItem>
<asp:ListItem>Programming</asp:ListItem>
</asp:DropDownList>
</InsertItemTemplate>
<ItemTemplate>
<asp:Button ID="btnAddNewRecord" runat="server" CausesValidation="False"
CommandName="New" Font-Bold="True" Text="Add New"
onclick="btnAddNewRecord_Click" />
</ItemTemplate>
</asp:FormView>
Загрузка страницы (создать параметр для электронной почты только в режиме вставки)
protected void Page_Load(object sender, EventArgs e)
{
if (formViewNewItem.CurrentMode == FormViewMode.Insert)
{
// Create your ControlParameter
ControlParameter deptParam = new ControlParameter();
deptParam.ControlID = formViewNewItem.FindControl("ddlInsertDepartment").UniqueID;
deptParam.PropertyName = "SelectedValue";
deptParam.Name = "RoleID";
deptParam.Type = TypeCode.String;
// Add it to your SelectParameters collection
dsourceToEmails.SelectParameters.Add(deptParam);
}
OnInserted, как только запись успешно добавлена, отправьте электронное письмо:
protected void testRecord_Inserted(object sender, EventArgs e)
{
DataView dvToEmails = (DataView)dsourceToEmails.Select(DataSourceSelectArguments.Empty);
string emailsTo = (string)dvToEmails.Table.Rows[0][0];
emailsTo = emailsTo.TrimEnd(',');
string networkUserName = Page.User.Identity.Name;
string emailUserName = networkUserName.Substring(12);
DropDownList departmentSelection = (DropDownList)formViewNewItem.FindControl("ddlInsertDepartment");
var message = new MailMessage();
var client = new SmtpClient();
message.From = new MailAddress("test@abc.com", "Task Tracker");
message.To.Add(emailsTo);
message.Subject = "New Project assigned for " + departmentSelection.SelectedValue;
message.Body = "A new task has been assigned.
<br /><br /><b>Entered by:</b> " + emailUserName;
message.IsBodyHtml = true;
client.Send(message);
}
1 ответ
Получил ответ на это... Мне пришлось переместить SqlDataSource в InsertItemTemplate, а затем использовать метод FindControl в коде OnInserted, чтобы найти SqlDataSource, который я переместил, но все работало так, как должно после всего этого.