首页 文章

WCF服务将数据填充到ASP.net下拉列表(学习WCF服务)

提问于
浏览
0

我正在尝试学习WCF服务,最终合并到我们的一个网站 .

我在我的数据库中创建了一个名为[TestTable]的测试表,我已经能够从可视工作室中创建的测试站点成功地将数据写入表中 .

我现在正在尝试从数据库中填充下拉列表 . 在这种情况下,所有州的列表 .

似乎有一些我缺少的东西 . 我可以调用该服务,它将显示WCF测试客户端中的所有状态;但是,我似乎无法弄清楚如何附加它返回到ASP.net下拉列表的列表 .

这是我的IService1.cs

[ServiceContract]
public interface IService1
{

    [OperationContract]
    //string GetData(int value);
    string InsertApplicantDetails(ApplicantDetails appInfo);

    [OperationContract]
    List<US_States> GetAllStates();

    //CompositeType GetDataUsingDataContract(CompositeType composite);

    // TODO: Add your service operations here

}

这是GetAllStates的Service1.svc.cs

public List<US_States> GetAllStates()
    {
        using (JobSeekersEntities db = new JobSeekersEntities())
        {
            var q = (from us_states in db.US_States
                     orderby us_states.abbr ascending
                     select us_states);

            List<US_States> list_States = q.ToList<US_States>();

            return list_States.ToList();

        }
    }

在测试网站中,我创建了名为"dropdownStates"的下拉列表 .
我添加了ServiceReference,它正在工作,因为我可以向数据库提交值 . 我还为下拉列表创建了一个Load()事件 .

这是我的测试页面 .

public partial class TestSubmission : System.Web.UI.Page

{ServiceReference1.Service1Client objCon = new ServiceReference1.Service1Client();

protected void Page_Load(object sender, EventArgs e)
{

}

protected void dropdownStates_Load(object sender, EventArgs e)
{
    //ServiceReference1.Service1Client myCon = new ServiceReference1.Service1Client();
    dropdownStates.Items = ????

}

}

任何帮助将不胜感激 . 感谢您的时间 .

2 回答

  • 1

    首先确保您已定义正确的DataContract和服务 Contract . 在以下示例中,我定义了具有2个属性的美国州 . 注意[OperationContract]和[DataContract]声明!

    namespace WcfService1
    {
        [ServiceContract]
        public interface IService1
        {
    
            [OperationContract]
            List<US_States> GetAllStates();
    
        }
    
    
        [DataContract]
        public class US_States
        {
            [DataMember]
            public int StateId { get; set; }
    
            [DataMember]
            public string StateName { get; set; }
        }
    }
    

    接下来向项目添加WebService引用并进行如下调用:(将StateName绑定到Text,将StateId绑定到Value)

    protected void dropdownStates_Load(object sender, EventArgs e)
        {
            ServiceReference1.Service1Client client = new ServiceReference1.Service1Client();
            dropdownStates.Items.Clear();
            dropdownStates.DataSource = client.GetAllStates();
            dropdownStates.DataTextField = "StateName";
            dropdownStates.DataValueField = "StateId";
            dropdownStates.DataBind();
            client.Close();
        }
    

    最后服务:

    namespace WcfService1
    {
        public class Service1 : IService1
        {
            public List<US_States> GetAllStates()
            {
                List<US_States> result = new List<US_States>();
                result.Add(new US_States() { StateId = 1, StateName = "New York" });
                result.Add(new US_States() { StateId = 2, StateName = "Washington" });
                result.Add(new US_States() { StateId = 3, StateName = "Indiana" });
                return result;
            }
        }
    }
    
  • 1
    using(ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
    {
            dropdownStates.Items.Clear();
            dropdownStates.DataSource = client.GetAllStates();
            dropdownStates.DataTextField = "Name";
            dropdownStates.DataValueField = "Id";
            dropdownStates.DataBind();
    }
    

    您只需将Dropdown DataSource设置为列表即可 . 将text和datavale字段设置为您想要显示为项目的内容以及它所拥有的值,最后调用DataBind .

相关问题