在共享方法中传递存储过程的参数值

时间:2013-11-25 08:58:39

标签: c# asp.net vb.net

我从来没有找到这个答案,如何传递存储过程的多个参数,这些参数在一个sharead或静态方法中stroed过程

我的网络服务需要作为共享或静态方法

[WebMethod(EnableSession = true)]
public static SearchParameters[] Select_Search()
{
    List<SearchParameters> JSON = new List<SearchParameters>();
    DataTable dtst = new DataTable();
    dsStockTableAdapters.newSTOCK_LISTTableAdapter List = new dsStockTableAdapters.newSTOCK_LISTTableAdapter();
    string theMake = HttpContext.Current.Session("SelectedMakeValue").ToString();

    dtst = List.GetData(theMake, "0", "0", "0", "0", DisplayType, "", "", "", "Any",
    "", "", "", "", "", 0, "", "", 0, "");

    try {
        foreach (DataRow rdr in dtst.Rows) {
            SearchParameters SRCH = new SearchParameters();
            SRCH.CHASSIS_NO = rdr["CHASSIS_NO"].ToString();
            SRCH.MODEL = rdr["MODEL"].ToString();
            SRCH.color = rdr["color"].ToString();
            SRCH.TRANSMISSION = rdr["TRANSMISSION"].ToString();
            SRCH.DOOR = rdr["DOOR"].ToString();
            SRCH.MAKE = rdr["MAKE"].ToString();
            SRCH.Image1 = rdr["Image1"].ToString();
            SRCH.MODEL_DESCRIPTION = rdr["MODEL_DESCRIPTION"].ToString();

            JSON.Add(SRCH);

        }
    } catch {
    }

    return JSON.ToArray();

}

我想将不同下拉列表和文本框中的值传递给下面的这个stroed过程

dtst = List.GetData(theMake, "0", "0", "0", "0", DisplayType, "", "", "", "Any",
    "", "", "", "", "", 0, "", "", 0, "");

类似

dtst = List.GetData(DropdownList1.SelectedValue, DropDownList2.SelectedValue, DropDownList3.SelectedValue, DropDownList4.SelectedValue, DropDownList5.SelectedValue, DropDownList6.SelectedValue, DropDownList7.SelectedValue, TextBox1.Text, TexBox2.Text);

我已经完成了每件事我可以为我创造了属性,我使用了会话但没有运气

简单易听,但很难实现如何将控制值用于共享或静态方法? miscrosoft有什么简单的方法吗?

2 个答案:

答案 0 :(得分:0)

您必须使用对UI实例的引用。

在VB中你可以使用引用:My.Forms。[FormName] .DropdownList1.SelectedValue

在C#中,您可以使用My命名空间:http://msdn.microsoft.com/en-us/library/ms173136.aspx

我认为另一种兼容两者的方法就是访问[FormName] .ActiveForm

但是你需要将那个转换为你的[FormName]类。此外,特定表格也必须是“有效”。

假设您有一个名为:MainForm的表单 在VB中:

With CType(MainForm.ActiveForm, MainForm)
            dtst = List.GetData(.DropdownList1.SelectedValue, .DropDownList2.SelectedValue, .DropDownList3.SelectedValue, .DropDownList4.SelectedValue, .DropDownList5.SelectedValue, .DropDownList6.SelectedValue, .DropDownList7.SelectedValue, .TextBox1.Text, .TexBox2.Text)
End With

请注意表单中每个非静态属性前面的点。

在C#中,由于没有 with 语句,你可以去做:

MainForm frm = (MainForm)MainForm.ActiveForm;
dtst = List.GetData(frm.DropdownList1.SelectedValue, frm.DropDownList2.SelectedValue, frm.DropDownList3.SelectedValue, frm.DropDownList4.SelectedValue, frm.DropDownList5.SelectedValue, frm.DropDownList6.SelectedValue, frm.DropDownList7.SelectedValue, frm.TextBox1.Text, frm.TexBox2.Text)

如果您开始拥有多个可以激活的表单,您可能会遇到问题,应该开始寻找其他解决方案......或其他应用程序设计。

通常如果我的应用程序中有静态过程,我会自己创建我的表单的实例,因此我有一个参考,我可以轻松访问和识别(区别于其他实例)

编辑:我刚才意识到,我的帖子与问题没什么关系

我保留这篇文章,直到我知道这个帖子是否满足:How to get a label value from web user control to a content page using master page

答案 1 :(得分:0)

如果您正在使用Web服务的共享或静态方法,那么有一个解决方案可以使用jquery将多个参数值从控件传递到存储过程...

我做了什么,我从jquery获取控制值并将控制值传递给webservice参数...但我必须保持两个参数的同名和键名称(JSON的关键数据)... < / p>

 var make = $('#<%= ddlMake.ClientID %>').val();
        var color = $('#<%= ddlColor.ClientID %>').val();
        var catagory = $('#<%= ddlCat.ClientID %>').val();
        var model = $('#<%= ddlMakeModel.ClientID %>').val();
        var GlobalLocation = $('#<%= ddlcountry.ClientID %>').val();
        var modelYear = $('#<%= ddlYear.ClientID %>').val();
        var modelYearTill = $('#<%= ddlYearTill.ClientID %>').val();
        var transmission = $('#<%= ddltransmission.ClientID%>').val();
        var minPrice = $('#<%= ddlcost1.ClientID%>').val();
        var maxPrice = $('#<%= ddlcost2.ClientID%>').val();
        var fual_type = $('#<%= rdfuelType.ClientID%>').val();
        var drive = $('#<%= ddldrive.ClientID %>').val();
        var chassis_no = $('#txtChassis_No').val();


        var data = { MAKE: make, COLOR: color, CATAGORY: catagory, MODEL: model, GLOBALLOCATION: GlobalLocation, MODELYEAR: modelYear, MODELYEARTILL: modelYearTill, TRANSMISSION: transmission, MINPRICE: minPrice, MAXPRICE: maxPrice, FUAL_TYPE: fual_type, DRIVE: drive, CHASSIS_NO: chassis_no }
        var jsonData = JSON.stringify(data); 

然后我在webservice参数

中传递了相同的密钥名称(密钥,JSON的值对)
datatable = myStock.GetData(MAKE, MODEL, COLOR, CATAGORY, GLOBALLOCATION, DisplayType, MODELYEAR, MODELYEARTILL, "", TRANSMISSION, MINPRICE, MAXPRICE, FUAL_TYPE, DRIVE, "", 0, CHASSIS_NO, "", 0, "")