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

Populate combobox in ASP.NET MVC with data from a WCF service

我创建了一个使用 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 class 文件的代码(它包含用于获取人员列表和更新人员的方法的代码段)

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();
        }
}

我的数据库上下文 class 看起来是这样的:

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

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

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

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

这是我的 ASP.NET MVC 项目中控制器 class 的代码。代码段有查看和更新​​的方法。

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 select 填充一个组合框。

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

我建议将 List<SelectListItems> 传递给您的视图。这会减少从控制器到视图的流量:

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"))

这将显示一个下拉菜单。

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