2012-07-19 57 views
1

我有一個MultiView來添加具有3個視圖的員工。請讓我知道正確的方法。這是我做的不好的代碼,它不工作。每次修改某些內容時都會出現新的錯誤。使用MultiView註冊不起作用

對不起,我這裏無法發示代碼。下面是ASP.NET論壇的帖子

http://forums.asp.net/t/1825476.aspx/1?Registration+using+MultiView+not+working+

namespace EmployeeMultiView.AdminPages 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
       MultiView1.ActiveViewIndex = 0; 
     } 

     private void InsertInfo() 
     { 
      String KKSTechConnectionString = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=KKSTech;Integrated Security=True"; 
      SqlConnection conn = new SqlConnection(KKSTechConnectionString); 
      //Session["sessFirstName"] = Request["textbox1"]; 

       try 
       { 
       conn.Open(); 
       String insertstring = @"Insert INTO Emp 
       (EmpID,FirstName,LastName,MiddleName,Mob1,Mob2,Phone,Email1,Email2,EmpDesc,Accno,IFSCCode,Branch,ApproxUnitPrice) 
       values (@EmpID,@FirstName,@LastName,@MiddleName,@Mob1,@Mob2,@Phone,@Email1,@Email2,@EmpDesc,@Accno,@IFSCCode,@Branch,@ApproxUnitPrice)"; 



       if (MultiView1.ActiveViewIndex == 0) 
       { 
        SqlCommand cmd = new SqlCommand("insertstring", conn); 
        cmd.CommandText = insertstring; 
        cmd.CommandType = CommandType.Text; 

        cmd.Parameters.AddWithValue("@EmpID", TextBox1.Text); 
        cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text); 
        cmd.Parameters.AddWithValue("@LastName", TextBox3.Text); 
        cmd.Parameters.AddWithValue("@MiddleName", TextBox4.Text); 
        cmd.Parameters.AddWithValue("@Mob1", TextBox5.Text); 
        cmd.Parameters.AddWithValue("@Mob2", TextBox6.Text); 
        cmd.Parameters.AddWithValue("@Phone", TextBox7.Text); 
        cmd.Parameters.AddWithValue("@Email1", TextBox8.Text); 
        cmd.Parameters.AddWithValue("@Email2", TextBox9.Text); 
        cmd.Parameters.AddWithValue("@EmpDesc", TextBox10.Text); 
        } 

       else if (MultiView1.ActiveViewIndex == 1) 
       { 
        SqlCommand cmd2 = new SqlCommand("insertstring", conn); 
        cmd2.CommandText = insertstring; 
        cmd2.CommandType = CommandType.Text; 

        cmd2.Parameters.AddWithValue("@Accno", TextBox11.Text); 
        cmd2.Parameters.AddWithValue("@IFSCCode", TextBox12.Text); 
        cmd2.Parameters.AddWithValue("@Branch", TextBox13.Text); 
        cmd2.Parameters.AddWithValue("@ApproxUnitPrice", TextBox16.Text); 
        cmd2.ExecuteNonQuery(); 
       } 
       else if (MultiView1.ActiveViewIndex == 2) 
       { 
        if (FileUpload1.HasFile) 
        { 
         byte[] productImage = FileUpload1.FileBytes; 



         String insertstring2 = @"Insert INTO Cert (CertName, CertLogo) 
                 values(@CertName, @CertLogo)"; 

         SqlCommand cmd3 = new SqlCommand("insertstring2", conn); 
         cmd3.CommandText = insertstring2; 
         cmd3.CommandType = CommandType.Text; 

         cmd3.Parameters.AddWithValue("@CertName", TextBox18.Text); 
         cmd3.Parameters.Add("@CertLogo", SqlDbType.VarBinary).Value = productImage; 

         cmd3.ExecuteNonQuery(); 
        } 
       } 
      } 

      catch (System.Data.SqlClient.SqlException ex) 
      { 

       string msg = "Insert Error:"; 
       msg += ex.Message; 
       throw new Exception(msg); 
      } 

      finally 
      { 
       Session.Abandon(); 
       conn.Close(); 
      } 

     } 
     protected void Button1_Click(object sender, EventArgs e) 
     { 


      InsertInfo(); 
      MultiView1.ActiveViewIndex += 1; 

     } 
protected void Button2_Click(object sender, EventArgs e) 
     { 
      MultiView1.ActiveViewIndex -= 1; 
     } 

     protected void Button5_Click(object sender, EventArgs e) 
     { 
      Response.Write("Successful"); 
     } 



    } 
} 
+0

我無法添加代碼,它說ident 4空間,我不明白。所以我發佈了我在論壇asp中發佈問題的鏈接。感謝, – Girish 2012-07-19 06:47:44

+0

當您編輯帖子時,只需選擇代碼並單擊工具欄上的{_} _按鈕{ – Jupaol 2012-07-19 06:50:55

+0

好吧,謝謝,我發佈了我的代碼..請檢查.. :) – Girish 2012-07-19 06:52:41

回答

0

,你將不得不在這裏的主要問題是,作爲寫的,您沒有提供在插入的參數正確的號碼查詢第一或第二個視圖。

一些一般的指針,可以幫助你 -

  • 使用開關/箱,而不是的if/else if/else語句,如果模式,如果你總是比較值相同,看http://msdn.microsoft.com/en-us/library/vstudio/06tc147t.aspx
  • 始終使用大括號對於if語句,即使它是單行,它也可以幫助您直觀地掃描代碼並理解結構。不需要
  • cmd.CommandType = CommandType.Text,因爲這是默認值,雖然也可以,如果你覺得它提高可讀性
  • 不要把引號insertstring中的SqlCommand CMD =新的SqlCommand( 「insertstring」,conn) - 而不是你已經創建的字符串變量插入字符串,使用引號會將SQL命令作爲字面上的「插入字符串」。
  • 如果您提供了SQL命令作爲參數(即上面的插入字符串),則不需要添加cmd.CommandText = insertstring;
  • 在您的代碼中使用有意義的ID,TextBox9舉例如何? Button2的功能是什麼?不得不去看看這些代碼會使代碼難以維護和更新。
  • 確保您使用設置爲TextBox ID的AssociatedControlID使用asp:Label控件在前端標註文本框。
  • 確保您驗證您需要的用戶輸入提供(使用所需的字段驗證)和所需類型和長度的(設置的MaxLength在TextBox控件以匹配數據庫中的字段長度)

我假設你的前端代碼是東西喜歡 -

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="EmployeeMultiView.AdminPages._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:MultiView ID="MultiView1" runat="server"> 
      <asp:View runat="server"> 
       <asp:Label AssociatedControlID="TextBox1" runat="server" Text="Label Text for TextBox1"></asp:Label> 
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox2" runat="server" Text="Label Text for TextBox2"></asp:Label> 
       <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox3" runat="server" Text="Label Text for TextBox3"></asp:Label> 
       <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox4" runat="server" Text="Label Text for TextBox4"></asp:Label> 
       <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox5" runat="server" Text="Label Text for TextBox5"></asp:Label> 
       <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox6" runat="server" Text="Label Text for TextBox6"></asp:Label> 
       <asp:TextBox ID="TextBox6" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox7" runat="server" Text="Label Text for TextBox7"></asp:Label> 
       <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox8" runat="server" Text="Label Text for TextBox8"></asp:Label> 
       <asp:TextBox ID="TextBox8" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox9" runat="server" Text="Label Text for TextBox9"></asp:Label> 
       <asp:TextBox ID="TextBox9" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox10" runat="server" Text="Label Text for TextBox10"></asp:Label> 
       <asp:TextBox ID="TextBox10" runat="server"></asp:TextBox> 
      </asp:View> 
      <asp:View runat="server"> 
       <asp:Label AssociatedControlID="TextBox11" runat="server" Text="Label Text for TextBox11"></asp:Label> 
       <asp:TextBox ID="TextBox11" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox12" runat="server" Text="Label Text for TextBox12"></asp:Label> 
       <asp:TextBox ID="TextBox12" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox13" runat="server" Text="Label Text for TextBox13"></asp:Label> 
       <asp:TextBox ID="TextBox13" runat="server"></asp:TextBox> 
       <asp:Label AssociatedControlID="TextBox16" runat="server" Text="Label Text for TextBox16"></asp:Label> 
       <asp:TextBox ID="TextBox16" runat="server"></asp:TextBox> 
      </asp:View> 
      <asp:View runat="server"> 
       <asp:Label AssociatedControlID="FileUpload1" runat="server" Text="Label Text for FileUpload1"></asp:Label> 
       <asp:FileUpload ID="FileUpload1" runat="server" /> 
       <asp:Label AssociatedControlID="TextBox18" runat="server" Text="Label Text for TextBox18"></asp:Label> 
       <asp:TextBox ID="TextBox18" runat="server"></asp:TextBox> 
      </asp:View> 
     </asp:MultiView> 

     <asp:Button ID="Button1" OnClick="Button1_Click" runat="server" Text="Next" /> 
     <asp:Button ID="Button2" OnClick="Button2_Click" runat="server" Text="Previous" /> 
    </div> 
    </form> 
</body> 
</html> 

在這種情況下,我後面會寫代碼像這個 -

using System; 
using System.Data.SqlClient; 
using System.Data; 

namespace EmployeeMultiView.AdminPages 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       MultiView1.ActiveViewIndex = 0; //Even though you don't need braces here it helps readability 
      } 
     } 

     private void InsertInfo() 
     { 
      String KKSTechConnectionString = @"Data Source=USER-PC\SQLEXPRESS;Initial Catalog=KKSTech;Integrated Security=True"; 
      //Store connection strings in your web.config file wherever possible 

      //Session["sessFirstName"] = Request["textbox1"]; 

      try 
      { 
       //Move connection so we don't open it unless we have to 
       string insertstring = @"Insert INTO Emp (EmpID,FirstName,LastName,MiddleName,Mob1,Mob2,Phone,Email1,Email2,EmpDesc,Accno,IFSCCode,Branch,ApproxUnitPrice) 
       values (@EmpID,@FirstName,@LastName,@MiddleName,@Mob1,@Mob2,@Phone,@Email1,@Email2,@EmpDesc,@Accno,@IFSCCode,@Branch,@ApproxUnitPrice)"; 

       //Use switch/case to compare multiple values (see http://msdn.microsoft.com/en-us/library/vstudio/06tc147t.aspx) 
       switch (MultiView1.ActiveViewIndex) 
       { 
        case 0: 
         //Need all the SQL parameters so we don't try to insert to the database here 
         break; 
        case 1: 
         using (SqlConnection conn = new SqlConnection(KKSTechConnectionString)) 
         { 
          SqlCommand cmd = new SqlCommand(insertstring, conn); 
          //cmd2.CommandText = insertstring; - also redundent 
          //cmd2.CommandType = CommandType.Text; - this is the default value so not needed 

          //Add the parameters from the first view here, these will rely on ViewState which must be enabled 
          cmd.Parameters.AddWithValue("@EmpID", TextBox1.Text); 
          cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text); 
          cmd.Parameters.AddWithValue("@LastName", TextBox3.Text); 
          cmd.Parameters.AddWithValue("@MiddleName", TextBox4.Text); 
          cmd.Parameters.AddWithValue("@Mob1", TextBox5.Text); 
          cmd.Parameters.AddWithValue("@Mob2", TextBox6.Text); 
          cmd.Parameters.AddWithValue("@Phone", TextBox7.Text); 
          cmd.Parameters.AddWithValue("@Email1", TextBox8.Text); 
          cmd.Parameters.AddWithValue("@Email2", TextBox9.Text); 
          cmd.Parameters.AddWithValue("@EmpDesc", TextBox10.Text); 

          cmd.Parameters.AddWithValue("@Accno", TextBox11.Text); 
          cmd.Parameters.AddWithValue("@IFSCCode", TextBox12.Text); 
          cmd.Parameters.AddWithValue("@Branch", TextBox13.Text); 
          cmd.Parameters.AddWithValue("@ApproxUnitPrice", TextBox16.Text); 

          conn.Open(); 
          cmd.ExecuteNonQuery(); 
         } 
         break; 
        case 2: 

         if (FileUpload1.HasFile) 
         { 
          byte[] productImage = FileUpload1.FileBytes; 

          String insertstring2 = @"Insert INTO Cert (CertName, CertLogo) 
                values(@CertName, @CertLogo)"; 

          using (SqlConnection conn = new SqlConnection(KKSTechConnectionString)) 
          { 
           SqlCommand cmd3 = new SqlCommand(insertstring2, conn); //No quotes 
           //cmd3.CommandText = insertstring2; - Redundant 
           //cmd3.CommandType = CommandType.Text; - this is the default value so not needed 

           cmd3.Parameters.AddWithValue("@CertName", TextBox18.Text); 
           cmd3.Parameters.Add("@CertLogo", SqlDbType.VarBinary).Value = productImage; 

           conn.Open(); 
           cmd3.ExecuteNonQuery(); 
          } 
         } 
         break; 
       } 
      } 
      catch (SqlException ex) 
      { 
       string msg = "Insert Error:"; 
       msg += ex.Message; 
       throw new Exception(msg); 
      } 
      finally 
      { 
       //Session.Abandon(); - this would run multiple times during the process 
      } 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      InsertInfo(); 
      //Don't try to set active view index to non-existant view 
      if (MultiView1.ActiveViewIndex < MultiView1.Views.Count) 
      { 
       MultiView1.ActiveViewIndex += 1; 
      } 
     } 

     protected void Button2_Click(object sender, EventArgs e) 
     { 
      //Assuming this is a "previous button" - may not need conditional if this is in the second view 
      if (MultiView1.ActiveViewIndex > 0) 
      { 
       MultiView1.ActiveViewIndex -= 1; 
      } 
     } 

     protected void Button5_Click(object sender, EventArgs e) 
     { 
      Response.Write("Successful"); 
      Session.Abandon(); //Move to end of operation 
     } 
    } 
}