2013-06-11 42 views
0

我有一个FormView允许将记录插入到表中,然后还发出确认电子邮件,记录已添加。根据选定的部门,电子邮件应该发送给一组特定的用户。所以我有以下。除了添加记录和电子邮件发送之后,除非我添加了记录,然后又将我带回,并且当我再次单击“添加新记录”按钮时,我会收到'在ControlParameter'中无法找到控件'formViewNewItem $ ddlInsertDepartment'角色ID”。'这就像formView插入到表中之后插入模式或东西。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("[email protected]", "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); 
     } 

回答

0

得到这个问题的答案......我不得不在SqlDataSource移动到InsertTemplate则,然后在OnInserted代码中使用FindControl方法找到我已经移动的SqlDataSource,但所有工作都应该如此。

相关问题