2012-09-07 172 views
0

我正在尝试创建一个由Ajax驱动的级联下拉列表。我发现的示例使用Web服务,但是使用VS2010 Web服务不附带。相反,我认为我会使用MVC。我已经学习了另一个教程,它展示了如何设置MVC服务,但是我的迭代不起作用。因为我还没有做过Web服务器或MVC服务,所以我认为它不应该那么艰难,但我搁浅了。有人能指出我做错了什么吗?我得到这个错误“编译器错误消息:CS0524:'位置':接口不能声明类型”与MVC VS2010级联下拉列表AJAX

请参阅我的代码波纹管。谢谢。 Risho

[ServiceContract] 
public interface ILocations 
{ 
    [OperationContract] 
    List<Locations> GetLocations(int ident); 

    [DataContract] 
    public class Locations <<- ERROR ******************************* 
    { 
     int ident = 0; 
     string description = string.Empty; 

     [DataMember] 
     public int Ident 
     { 
      get { return ident; } 
      set { ident = value; } 
     } 

     [DataMember] 
     public string Description 
     { 
      get { return description; } 
      set { description = value; } 
     } 
    } 
} 


public class Locations : ILocations 
{ 
    SqlCommand cmd = new SqlCommand(); 
    SqlConnection conn = new SqlConnection(); 
    string connString = WebConfigurationManager.ConnectionStrings["dbLocations"].ToString(); 

List<ILocations.Locations>GetLocations(int ident) 
{ 
     cmd.Connection = new SqlConnection(connString); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandText = "sp_Location_Get_Children"; 

     cmd.Parameters.Add("@pintParentIdent", SqlDbType.Int); 
     cmd.Parameters["@pintParentIdent"].Value = ident; 

     List<ILocations.Locations> _location = new List<ILocations.Locations>(); 

     try 
     { 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataTable dtLocations = new DataTable(); 
      da.Fill(dtLocations); 

      if (dtLocations.Rows.Count > 0) 
      { 
       for (int i = 0; i < dtLocations.Rows.Count; i++) 
       { 
        ILocations.Locations _locInfo = new ILocations.Locations(); 
        _locInfo.Ident = Convert.ToInt32(dtLocations.Rows[i]["ident"]); 
        _locInfo.Description = dtLocations.Rows[i]["description"].ToString(); 

        _location.Add(_locInfo); 
       } 
      } 
      return _location; 
     } 
     catch (Exception ex) 
     { 
      cmd.Connection.Close(); 
      throw; 
     } 
    } 
} 


<ajaxToolkit:CascadingDropDown ID="cddLocations" runat="server" 
     TargetControlID="ddlLocationDetail" 
     Category="description" 
     PromptText="Select Location" 
     LoadingText="Loading..." 
     ServicePath="~/App_Code/ILocations.cs" 
     ServiceMethod="" 
     ParentControlID="ddlRoomLocation" 
     SelectedValue="ident" /> 
     <asp:DropDownList runat="server" ID="ddlRoomLocation" AppendDataBoundItems="True" 
      DataTextField="description" DataValueField="ident" 
      width="246px" CssClass="AssetMngnt-smallFont" AutoPostBack="true" 
      OnSelectedIndexChanged="ddlRoomLocation_OnSelectedIndexChanged" > 
      <asp:ListItem Value="-1" Selected="True">-- Select a Location --  </asp:ListItem> 
      <asp:ListItem Value="-2">-- All Printers --</asp:ListItem> 
     </asp:DropDownList> 

     <asp:DropDownList Visible="false" runat="server" ID="ddlLocationDetail" AppendDataBoundItems="True" 
      DataTextField="description" DataValueField="ident" 
      width="246px" CssClass="AssetMngnt-smallFont" AutoPostBack="true" 
      OnSelectedIndexChanged="ddlLocationDetail_OnSelectedIndexChanged" > 
      <asp:ListItem Value="-1" Selected="True">-- Select a Detail --</asp:ListItem> 
     </asp:DropDownList> 
+0

您的代码示例使用DropDownList控件,它是一个Web窗体控件。 ASP.NET MVC中没有这样的控件。 – Shyju

+0

这是正确的,我正在建立一个网站。在VS2010中引人注意的是,web服务已经被MVC服务取代,以便与Ajax级联下拉菜单一起工作。 – Risho

回答

0

从接口“ILocations”声明中取出类“Locations”声明。这些不能嵌套。