使用WCF服务中的数据填充ASP.NET MVC中的组合框

时间:2019-06-30 07:22:59

标签: c# asp.net-mvc wcf drop-down-menu

我创建了一个与WCF服务一起使用的基本应用程序。该应用程序执行基本的插入更新删除操作。

我已经这样定义了IService接口:

[ServiceContract]
public interface IService1
{
        [OperationContract]
        IEnumerable<Person> GetPersons();
        [OperationContract]
        IEnumerable<Person> GetPersonsByFNameAndLName(string FName,string LName);
        [OperationContract]
        void InsertPerson(Person personobj);
        [OperationContract]
        void UpdatePerson(Person personobj);
        [OperationContract]
        void DeletePerson(int id);
}

[DataContract]
public class Person
{
        [DataMember]
        [Key]
        [Required]
        public int Id { get; set; }

        [DataMember]
        [Required]
        public string FName { get; set; }

        [DataMember]
        [Required]
        public string MName { get; set; }

        [DataMember]
        [Required]
        public string LName { get; set; }

        [DataMember]
        [Required]
        public DateTime DOB { get; set; }

        [DataMember]
        [Required]
        public string Adddress { get; set; }

        [DataMember]
        [Required]
        public string NIC { get; set; }
}

这是我的service1.svc.cs类文件的代码(它包含用于获取人员列表和更新人员的方法的代码段)

public class Service1 : IService1
{
        public IEnumerable<Person> GetPersons()
        {
            List<Person> personList = new List<Person>();
            PersonContext po = new PersonContext();
            personList = po.Persons.ToList();
            return personList;
        }

        public void UpdatePerson(Person personobj)
        {
            PersonContext po = new PersonContext();
            var c = (from per in po.Persons
                     where per.Id == personobj.Id
                     select per).First();
            c.FName = personobj.FName;
            c.LName = personobj.LName;
            c.MName = personobj.MName;
            po.SaveChanges();
        }
}

和我的数据库上下文类看起来像这样:

public class PersonContext : DbContext
{
        public PersonContext() : base("PersonCS")
        {
        }

        public DbSet<Person> Persons { get; set; }    
}

我正在使用PersonCS文件中的web.config数据库连接来连接到我的数据库。

我已将此服务添加为对我的ASP.NET MVC项目的服务引用。

这是我的ASP.NET MVC项目中控制器类的代码。该代码段包含用于查看和更新​​的方法。

public class PersonController : Controller
{
        public ActionResult getPersons()
        {
            Service1Client SEObj = new Service1Client();
            List<Person>PeLi =SEObj.GetPersons().ToList();
            ViewBag.List = PeLi;
            return View();
        }

        public ActionResult updatePerson()
        {
            return View();
        }

        [HttpPost]
        public ActionResult updatePerson(Person personobj)
        {
            Service1Client SCOBJ = new Service1Client();
            SCOBJ.UpdatePerson(personobj);
            return View();
        }
} 

这是视图后面的代码:

<form method="post" action="@Url.Action("updatePerson")">

    ID:<input type="text" name="Id" /> 
    <br />
    First Name: <input type="text" name="FName" />
    <br />
    Middle Name: <input type="text" name="MName" />
    <br />
    Last Name: <input type="text" name="LName" />
    <br />
    Date of Birth:<input type="date" id="start" name="DOB" value="2018-07-22" min="1900-01-01" max="2000-12-31" />
    <br />
    NIC:<input type="text" name="NIC" />
    <br />
    Address:<input type="text" name="Adddress" />
    <br />
    <input type="submit" value="Insert" />

</form>

在视图中,我试图手动输入ID并删除。

我想做的是用数据库中可用的ID填充组合框,然后从组合框中的ID中进行选择。

有人可以帮助我或指导我实现这一目标吗?

1 个答案:

答案 0 :(得分:2)

我建议将List<SelectListItems>传递给您。这样可以减少从Controller到视图的流量:

public ActionResult updatePerson()
{
    Service1Client SEObj = new Service1Client();
    List<Person>PeLi =SEObj.GetPersons().ToList();
    ViewBag.List = PeLi.Select(x => new SelectListItems {
        Value = x.Id,
        Text = x.FName + " " + x.LName
    });

    return View();
}

现在ViewBag.List中有您的List<SelectListItems>个人。

在视图中,您只需要显示以下列表:

@Html.DropDownList("personId", new SelectList(ViewBag.List, "Value", "Test"))

这将显示一个下拉列表。

在将表单发布到控制器上时,您应该提出一个新问题或寻找其他答案,以了解如何从控制器端的表单中接收值。