【问题标题】:Formview not letting me add a second record after adding a firstFormview 在添加第一条记录后不允许我添加第二条记录
【发布时间】:2013-06-11 19:16:57
【问题描述】:

我有一个 FormView,它允许将记录插入表中,然后还会发送一封确认电子邮件,说明已添加记录。根据选择的部门,电子邮件应该发送给一组特定的用户。所以我有以下。一切正常,除了在我添加记录后,电子邮件发送,然后它带我回来,当我再次单击添加新记录按钮时,我得到 'Could not find control '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);
        }

【问题讨论】:

    标签: asp.net sqldatasource formview autopostback


    【解决方案1】:

    得到了这个问题的答案...我不得不将 SqlDataSource 移动到 InsertItemTemplate,然后使用 OnInserted 代码中的 FindControl 方法来查找我已移动的 SqlDataSource,但所有这些都可以正常工作.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多