2017-01-28 7 views
0

ここでは例外が発生するコードを示します。引数例外の例外ASP.Net

protected void AddButton_Click(object sender, EventArgs e) 
{ 
    if (Page.IsValid) 
    { 
     int empId = Id++; 
     Employees employees = new Employees(); 
     employees.AddEmployee(new Employee(empId, txtName.Text,    txtEmail.Text, txtMobile.Text, txtLandline.Text, txtWebsite.Text, txtAddress.Text)); 
     foreach (Employee employee in employees.GetList()) 
     { 
      if (employee.Name.Equals(txtName.Text)) 
      { 
       Repeater1.DataSource = employee; 
       Repeater1.DataBind(); 
      } 
     } 
    } 
    else 
    { 
     contactsForm.Style.Add("display", "block"); 
    } 

それは**型「System.ArgumentExceptionの」の例外を例外 を与えているがのSystem.Web.dllに発生したが、ユーザーコードで

追加情報を扱っていなかった:無効なデータソースがされていますRepeater1に使用されます。有効なデータソースは、IListSourceまたはIEnumerableをのいずれかを実装する必要があります。**

public class Employee 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Email { get; set; } 
    public string MobileNumber { get; set; } 
    public string LandLineNumber { get; set; } 
    public string Website { get; set; } 
    public string Address { get; set; } 

    public Employee(int id, string name, string email, string mobilenumber, string landlinenumber, string website, string address) 
    { 
     Id = id; 
     Name = name; 
     Email = email; 
     MobileNumber = "+91 " + mobilenumber; 
     LandLineNumber = landlinenumber; 
     Website = website; 
     Address = address; 
    } 
} 
public class Employees 
{ 
    List<Employee> ListOfEmployee = new List<Employee>(); 
    public void AddEmployee(Employee employee) 
    { 
     ListOfEmployee.Add(employee); 
    } 
    public List<Employee> GetList() 
    { 
     return ListOfEmployee; 
    } 
} 

これは、従業員クラスです。

どうすればその例外を解決できますか。

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <asp:Label ID="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Name") %>'></asp:Label> 
     <asp:Label ID="Label2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Email") %>'></asp:Label> 
     <asp:Label ID="Label3" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MobileNumber") %>'></asp:Label> 
    </ItemTemplate> 
</asp:Repeater> 

これは、リピータは、コレクションを期待しているの.aspxコード

答えて

0

ですが、あなたはそれを1つのオブジェクトのみを渡しています。これを試してみてください。

if (employee.Name.Equals(txtName.Text)) 
{ 
     Repeater1.DataSource = new List<Employee>(){ employee }.AsEnumerable(); 
     Repeater1.DataBind(); 
} 
0

それを

var filteredEmployees = employees.GetList().Where(p=> p.Name.Equals(txtName.Text)).ToList(); 
Repeater1.DataSource = filteredEmployees; 
Repeater1.DataBind(); 
を試してみて