2017-01-11 2 views
1

午後の人々を、表示され、いくつかのフィールドとドロップダウンボックスで簡単なフォームを持っています。私はエンティティフレームワークにCRUDメソッドを使用し、システムで新しいレコードを正常に表示および作成できます。MVCドロップダウンオプションは、デバッグモードで「NULL」としてMVC 5とC#に</p> <p>イム新しい

唯一の問題は、エンティティフレームワークにリンクしてこれらのタイトルをリストに挿入する 'タイトル'ドロップダウンがあることです。 Webページを読み込むと、ドロップダウンリストで使用できるタイトルが表示されますが、フォームを送信すると、[タイトル]フィールドを除くすべての値がデータベースに送信されます。

私のプログラムをデバッグすると、このフィールドは選択したものに関係なくnullを表示します。

私は以下のチュートリアルに従ってこの作業を行い、ネットを見渡しましたが、解決策を見つけるのに苦労しました。

Link to tutorial

は、私は私のモデルでは、「タイトル」や他の名前の「クライアントレコード」という名前の1で2つのテーブルを持っています。私はデータベースの最初のアプローチを使用して、私は一つにこれら2つのデータベース・モデルを組み合わせている最初のコードされていないとして

namespace EDT_Test.Models.ViewModels 
    { 
    public partial class Marie_Testing 
    { 
    [Display(Name = "Client Ref:")] 
    public int id { get; set; } 

    [Display(Name = "Created By:")] 
    public string CreatedBy { get; set; } 

    public List<Title> allTitles { get; set; } 

    [Required] 
    [Display(Name = "Surname:")] 
    public string Surname { get; set; } 

    [Display(Name = "Additional Surname:")] 
    public string Surname2 { get; set; } 

    [Required] 
    [Display(Name = "Forename:")] 
    public string Forename1 { get; set; } 

    [Display(Name = "Additional Forename:")] 
    public string Forename2 { get; set; } 

生成Entity Frameworkのモデルは次のようになります。

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated from a template. 
// 
//  Manual changes to this file may cause unexpected behavior in your application. 
//  Manual changes to this file will be overwritten if the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace EDT_Test.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class ClientRecord 
    { 
     public int id { get; set; } 
     public string CreatedBy { get; set; } 
     public string Title { get; set; } 
     public string Surname { get; set; } 
     public string Surname2 { get; set; } 
     public string Forename1 { get; set; } 
     public string Forename2 { get; set; } 
    } 
} 

自動的に作成されたモデルとMarie_Testingモデルの間のタイトルフィールドの唯一の違いは、タイトルフィールドを文字列からリストアイテムに変更したことです。

<div class="form-group"> 
    @Html.LabelFor(model => model.allTitles, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     <select id="titleid" name="titlename" class="form-control"> 
      @foreach (var item in Model.allTitles) 
      { 
       <option value="@item.id">@item.Title1</option> 
      } 
     </select> 
    </div> 
</div> 

のための私のコード:

私Create.cshtmlは、この(私のMarie_Testingという名前のモデルではなく、エンティティフレームワークで作成され、自動生成されたものにリンクのように見えるタイトルドロップダウンのためのdiv要素を保持していますClientRecordsControllerは次のとおりです。

// GET: ClientRecords/Create 
    public ActionResult Create() 
    { 
     ////set the defaults (dropdown) of the page for the ceaton of a new record. 
     Marie_Testing vmPopulateData = new Marie_Testing(); 

     List<Title> titles = (from t in db.Titles select t).ToList(); 
     //List<Title> titles = Title.Select(t => new{t.id, t.Title}.ToString.ToList()); 
     vmPopulateData.allTitles = titles; 

     return View(vmPopulateData); 
    } 

    // POST: ClientRecords/Create 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "id,CreatedBy,Title,Surname,Surname2,Forename1,Forename2")] ClientRecord clientRecord) 
    { 
     if (ModelState.IsValid) 
     { 
      db.ClientRecords.Add(clientRecord); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(clientRecord); 
    } 

私は、Webページのドロップダウンリストを表示することができますが、選択された値を取得し、データベースにこれを投稿することができないようどのように理解していないとして、すべてのヘルプははるかに高く評価されて

よろしく ベティB

答えて

1

@Html.DropDownListForを試してみませんか?

<select id="titleid" name="titlename" class="form-control"> 
    @foreach (var item in Model.allTitles) 
    { 
     <option value="@item.id">@item.Title1</option> 
    } 
</select> 

試し:x.PropertyToBindToは、あなたがその選択リストから取得する必要がどのような値である

@Html.DropDownListFor(x => x.PropertyToBindTo, new SelectList(Model.allTitles, "id", "Title1"), new { @class = "form-control", id = "Title", name = "Title" }) 

これに代え

。それを試してみてください...どのようにしてそれを動作させる必要があるかを本当に理解するためには、少し試合をしなければならないかもしれません。

+0

を使用することを好みます –

1
あなたはあなたのビューが

<select id="Title" name="Title" class="form-control"> 

<select id="titleid" name="titlename" class="form-control"> 

から変更しますので、ドロップダウンリストから選択した値を保持する文字列フィールドを持っている必要があります

とこのようなビューモデルにはTitleプロパティもあります

public string Title{get;set;} 

これがなぜ起こるのかを理解するためには、MVCがフォームをモデルにバインドする方法を読んでおく必要があります。

0

だけでなく、私はAlikが言った...また、この

C#

List<Titles> oTitlesList = TitlesService.getTitles(); 
ViewBag.DropDownListBag = new SelectList(oTitlesList , "Id", "Name"); 

レイザー

@Html.DropDownListFor(model => model.yourModelAtt, @ViewBag.DropDownListBag as SelectList, "Select.....", new { @class = "form-control" }) 
関連する問題