在ASP.NET MVC中使用来自WCF服务的数据填充Combobox



我创建了一个与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; }    
}

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

我添加了此服务作为对我的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的组合,然后从ComboBox中的ID中进行选择。

谁能帮助我或指导我实现这一目标?

我建议将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"))

这将显示下拉菜。

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

最新更新