【问题标题】:Populate combobox in ASP.NET MVC with data from a WCF service使用来自 WCF 服务的数据填充 ASP.NET MVC 中的组合框
【发布时间】:2019-06-30 07:22:59
【问题描述】:

我创建了一个使用 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 填充一个组合框,然后从组合框中的 id 中进行选择。

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

【问题讨论】:

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


    【解决方案1】:

    我建议将List&lt;SelectListItems&gt;传递给您的视图。这将减少从控制器到视图的流量:

    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&lt;SelectListItems&gt;

    在视图中你只需要像这样显示这个列表:

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

    这将显示一个下拉菜单。

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

    【讨论】:

    • 您需要调试 viewbag.list 中的值。里面有什么?
    • 你得到这一行的值了吗? 'ListPeLi =SEObj.GetPersons().ToList();'
    • 不,页面甚至没有加载。在转到该行之前,正在调用视图。当它遇到空异常时,它不会发布。
    • 我只想说:你需要把我写的代码放在你的控制器动作中,当你点击你的页面时它会被加载。这应该会显示一个下拉列表。
    • 现在可以正常使用了。如果你现在可以帮忙我还有一个问题,现在当我的 post 方法返回其中的视图时,它在这行代码的视图中给了我空异常错误。你有什么建议来克服这个问题?
    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多