2015-06-24 46 views
1

我有一個表存儲人。屬性是名字,姓氏和PersonID。我已經添加了屬性public string NameFull {get {return FirstName +「」+ LastName; }}並且能夠將輸出顯示爲連接名稱。ASP.NET MVC連接名稱和映射到ID#

但是,當用戶選擇名稱時,我想將其存儲爲PersonID。

目前,我有這個作爲我的LINQ Where語句:

var personID= db.Persons 
     .Where(h => Names == model.Person.NameFull) 
     .Select(h => h.PersonID); 
var idToSave = personID.AsEnumerable().FirstOrDefault().Trim().ToString(); 

在控制器:

SelectList names = new SelectList(db.Person.ToArray(), "PersonID", "NameFull"); 
     ViewBag.Names = names; 

會有人能夠指出我在正確的方向?

+0

是'Names'是表中名稱的完整列表嗎?另外,全名是否被認爲是獨一無二的,或者是否有可能有多於一個人(不太可能)具有相同的姓氏和名字? –

+0

你能更具體嗎?你想要你的PersonID是什麼? '。()'返回一個集合,這是你想要的嗎? 顯示名稱時是否要存儲它? –

+0

請提供更多代碼。 什麼是'名稱','模型'和'contactIDquery',這個應該保存在哪裏? –

回答

1

運行小提琴

這裏是a running fiddle,我爲您創建。選擇一個人並點擊提交。所選人員的ID將在HTTP帖子後顯示。

型號

MyViewModel包含人的ListSelectedPersonID。這是我們綁定到DropDownListFor這個視圖模型。

using System.Collections.Generic; 

namespace HelloWorld 
{ 
    public class MyViewModel 
    { 
     public int SelectedPersonID { get; set; } 
     public List<Person> Persons { get; set; } 
    } 

    public class Person 
    { 
     public int PersonID { get; set; } 
     public string First { get; set; } 
     public string Last { get; set; } 

     public string NameFull 
     { 
      get { 

       return First + " " + Last; 
      } 
     } 
    } 
} 

查看

我們綁定DropDownListForMyViewModel。具體來說,第一個參數是當前SelectedPersonId,第二個參數是我們從視圖模型創建的新SelectList

@model HelloWorld.MyViewModel 
@{ 
    Layout = null; 
} 

<!DOCTYPE html>  
<html lang="en"> 
    <head></head> 
    <body> 

     @using (Html.BeginForm()) 
     { 
      @Html.DropDownListFor(
       m => m.SelectedPersonID, 
       new SelectList(Model.Persons, "PersonID", "NameFull")) 
      <button type="sumbit">Submit</button> 
     } 
     <span>Selected Person's ID is @Model.SelectedPersonID</span> 

    </body> 
</html> 

控制器

在後回控制器,我們可以檢索SelectedPersonID

using System.Web.Mvc; 
using System.Collections.Generic; 
using System.Linq; 

namespace HelloWorld 
{ 
    public class HomeController : Controller 
    { 
     public FakeDb fakeDb = new FakeDb(); 

     [HttpGet] 
     public ActionResult Index() 
     { 
      var vm = new MyViewModel { 
       SelectedPersonID = fakeDb.Persons.FirstOrDefault().PersonID, 
       Persons = fakeDb.Persons 
      }; 

      return View(vm); 
     } 

     [HttpPost] 
     public ActionResult Index(MyViewModel vm) 
     { 
      // this is redundant 
      // but illustrates how to access the selected id 
      vm.SelectedPersonID = vm.SelectedPersonID; 
      vm.Persons = fakeDb.Persons; 

      return View(vm); 
     } 
    } 
} 

FakeDb

這只是用於演示目的。

public class FakeDb 
{ 
    public List<Person> Persons 
    { 
     get 
     { 
      var persons = new List<Person>(); 
      for (var i = 0; i < 10; ++i) 
      { 
       persons.Add(new Person() 
       { 
        First = "First" + i, 
        Last = "Last" + i, 
        PersonID = i 
       }); 
      } 

      return persons; 
     } 
    } 
} 
2

如果我理解正確,那麼你要顯示在下拉列表中的姓氏和名字,當用戶選擇一個名稱組合,那麼這個人的ID已經用於代替?如果是這樣,那麼下面的代碼是基於我上面的假設。

我已經創建了必要的類,就像我將要做的那樣。請原諒,如果我遺漏了一些東西,下面的代碼沒有經過測試。

Person類將是這個樣子:

public class Person 
{ 
    public int Id { get; set; } 

    public string FirstName { get; set; } 

    public string LastName { get; set; } 

    public string FullName 
    { 
      get 
      { 
       return FirstName + " " + LastName; 
      } 
    } 
} 

我沒有在年齡,不知道有Entity Framework工作是否會抱怨FullName不是在人員表中的列名。

創建一個PersonViewModel類,您將傳入視圖。

public class PersonViewModel 
{ 
    public PersonViewModel() 
    { 
      Persons = new List<Person>(); 
    } 

    public int PersonId { get; set; } 

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

在你的控制器,你就會有這樣的事情:

public ActionResult Create() 
{ 
    PersonViewModel model = new PersonViewModel(); 

    // Get a list of all the people 
    // I can't remember how to use Entity Framework to get a list of all the people, 
    // it's something like the code below 
    model.Persons = db.Persons; 

    return View(model); 
} 

您的文章操作方法:

[HttpPost] 
public ActionResult Create(PersonViewModel model) 
{ 
    // Do whatever you need to do 
} 

在您的視圖代碼看起來是這樣的:

@Html.DropDownListFor(
    x => x.PersonId, 
    new SelectList(Model.Persons, "Id", "FullName", Model.PersonId), 
    "-- Select --" 
) 

上面的代碼守ld在下拉列表的「文本」部分顯示名字和姓氏,並在下拉列表的值中顯示人物的ID。

我希望你能對:) :)