使用来自 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"))
这将显示一个下拉菜单。
在将表单发布到控制器时,您应该提出一个新问题或寻找其他答案,了解如何在控制器端从表单接收值。
我创建了一个使用 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"))
这将显示一个下拉菜单。
在将表单发布到控制器时,您应该提出一个新问题或寻找其他答案,了解如何在控制器端从表单接收值。