2015-06-17 45 views
1

我有这个aspx代码,我很困惑asmx.cs代码。级联DropDownList与存储过程

ASPX:

<div class="col-md-6"> 

<asp:DropDownList ID="ddlMake" runat="server" CssClass="form-control"></asp:DropDownList> 
<ajaxToolkit:CascadingDropDown ID="cdlMake" TargetControlID="ddlMake" PromptText="Select Make" PromptValue="" ServicePath="CascadingDropdown1.cs.asmx" ServiceMethod="GetMakes" runat="server" Category="MakeId" LoadingText="Loading Make..." /> 
    </div> 
<div class="col-md-6"> 
<asp:DropDownList ID="ddlModel" runat="server" CssClass="form-control"></asp:DropDownList> 
<ajaxToolkit:CascadingDropDown ID="cdlModel" TargetControlID="ddlModel" PromptText="Select Model" PromptValue="" ServicePath="CascadingDropdown1.cs.asmx" ServiceMethod="GetModels" runat="server" Category="ModelId" ParentControlID="ddlMake" LoadingText="Loading Model..." /> 
</div> 

,我有一个名为Stored ProcedureSearch_MAKESearch_MODEL模型SP需要的参数。

有人可以帮我构造asmx.cs的代码。

UPDATE:

[ScriptService] 
public class CascadingDropdown1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public CascadingDropDownNameValue[] GetMakes(string knownCategoryValues) 
    { 
     string query = "exec spIBCInventorySearch_MAKE @IDCustomer = 253433"; 
     List<CascadingDropDownNameValue> Makes = GetData(query); 
     return Makes.ToArray(); 
    } 

[WebMethod] 
public CascadingDropDownNameValue[] GetModels(string knownCategoryValues) 
{ 
    string make = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["MakeId"]; 
    string query = string.Format("exec spIBCInventorySearch_MODEL @VehicleMake = {0}, @IDCustomer = 253433 ", make); 
    List<CascadingDropDownNameValue> Models = GetData(query); 
    return Models.ToArray(); 
} 

private List<CascadingDropDownNameValue> GetData(string query) 
{ 
    string conString = ConfigurationManager.ConnectionStrings["UID=pal;Password=123;DATABASE=ATDBSQL;"].ConnectionString; 
    SqlCommand cmd = new SqlCommand(query); 
    List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); 
    using (SqlConnection con = new SqlConnection(conString)) 
    { 
     con.Open(); 
     cmd.Connection = con; 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       values.Add(new CascadingDropDownNameValue 
       { 
        name = reader[0].ToString(), 
        value = reader[1].ToString() 
       }); 
      } 
      reader.Close(); 
      con.Close(); 
      return values; 
     } 
    } 
} 

}

我刚拍完的asmx代码,但它会在conString部分断裂。有人可以帮我调试这个问题吗?

回答

1

您试图以奇怪的方式从配置文件中获取连接字符串。一般来说它是connectionStrings部分的一个关键字。例如:

<connectionStrings> 
<add name="YourConnectionString" connectionString="Server=WIN-9A0EHHSEC8L\SQLEXPRESS2014;Database=SenseAPIClient;Integrated Security = true;" providerName="System.Data.SqlClient" /> 

检索数据库连接字符串我需要使用 “YourConnectionString”。就像下面:

var conString = ConfigurationManager.ConnectionStrings["YourConnectionString"].ConnectionString; 
+0

从哪里得到'ApiConnectionString'先生? @qamar –

+1

您需要在您的web.config文件部分中设置连接字符串。用你的我的价值取代。在你的代码中,你可以使用你设置的键检索连接字符串,在我们的例子中,“YouConnectionString”我希望这有意义 – qamar

+0

谢谢先生。修复连接字符串部分后,还有更多问题。这也将打破在'values.Add(新CascadingDropDownNameValue { 名=阅读[0]的ToString(), 值=读卡器[1]的ToString() });' –

0
[ScriptService] 
public class CascadingDropdown1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public CascadingDropDownNameValue[] GetMakes(string knownCategoryValues) 
    { 
     string query = "exec spIBCInventorySearch_MAKE @IDCustomer = 253433"; 
     List<CascadingDropDownNameValue> Makes = GetData(query); 
     return Makes.ToArray(); 
    } 

[WebMethod] 
public CascadingDropDownNameValue[] GetModels(string knownCategoryValues) 
{ 
    string make = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues)["MakeId"]; 
    string query = string.Format("exec spIBCInventorySearch_MODEL @VehicleMake = {0}, @IDCustomer = 253433 ", make); 
    List<CascadingDropDownNameValue> Models = GetData(query); 
    return Models.ToArray(); 
} 

private List<CascadingDropDownNameValue> GetData(string query) 
{ 
    string conString = ConfigurationManager.ConnectionStrings["UID=pal;Password=123;DATABASE=ATDBSQL;"].ConnectionString; 
    SqlCommand cmd = new SqlCommand(query); 
    List<CascadingDropDownNameValue> values = new List<CascadingDropDownNameValue>(); 
    using (SqlConnection con = new SqlConnection(conString)) 
    { 
     con.Open(); 
     cmd.Connection = con; 
     using (SqlDataReader reader = cmd.ExecuteReader()) 
     { 
      while (reader.Read()) 
      { 
       values.Add(new CascadingDropDownNameValue 
       { 
        name = reader[0].ToString(), 
        value = reader[0].ToString() 
       }); 
      } 
      reader.Close(); 
      con.Close(); 
      return values; 
     } 
    } 
} 

我只是改变在value=reader[0].ToString()从1指数0 :)

,因为我只有1在表列。