2011-12-20 7 views
1

私は、Music Storeのチュートリアルに従います。私はpgでStoreManagerControllerを作成しました。 54ish。そして、それはCreate、Deleted、Editなどのビューを作成しました。それはデータベースにいくつかのもの、つまり私のEditForコントロールを保存していますが、それ以外は何も保存しません。データベースへのMVCフォームの提出の処理

私は、複数のDropDownListForコントロールをデータベース内のテーブルとActive Directoryユーザーデータの両方で作成しています。私はこれらを保存する方法がわかりません。ここに私の要約したコードがあります。助けてくれてありがとう。

ビュー:

<div class="createTopInner"> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.test.Category) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.CategoryId, Model.CategoryItems, "") 
     @Html.ValidationMessageFor(model => model.test.Category) 
    </div> 
</div> 

はコントローラー:

public ActionResult Create() 
{ 
    // These four lines get active directory users 
    ActiveDirectoryModel ads = new ActiveDirectoryModel(); 
    ViewBag.assignedto = ads.FetchContacts(); 
    ViewBag.coassignedto = ads.FetchContacts(); 
    ViewBag.notifyto = ads.FetchContacts(); 
    var model = Populate(); 
    return View(model); 
} 

[HttpPost] 
public ActionResult Create(CreateViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     db.TestItems.AddObject(model.test); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(model); 
} 

public CreateViewModel Populate() 
{ 
    var model = new CreateViewModel 
    { 
     CategoryItems = 
      from c in new IntraEntities().CategoryItems.ToList() 
      select new SelectListItem 
      { 
       Text = c.Name, 
       Value = c.ID.ToString() 
      } 
    }; 
    return model; 
} 

モデル:

public class CreateViewModel 
{ 
    public Intra.Models.TestItem test{ get; set; } 

    public int CategoryId { get; set; } 
    public IEnumerable<SelectListItem> CategoryItems { get; set; } 
} 

答えて

0

問題は、あなたの入力のほとんどがtestのプロパティにマッピングしながら、ということのようです、 CategoryIdはありません。あなたのエンティティモデルについて何も知らないのは言うまでもありませんが、データベースから対応するCategoryを取り出して、それを永続化する前にTestItemインスタンスに追加する必要があると思います。 TestItemインスタンスにCategoryIdプロパティを設定している場合は、設定することはできますが、プロパティを追加する代わりに(Categoryラベルの場合と同じように)直接使用するため、そうしないと思いますビューモデルに追加します。

0

ストアドプロシージャにアクセスする/知っている場合は、ストアプロシージャをデータベース内で使用し、エンティティ内で呼び出す方がはるかに優れています。はるかに疎結合しており、コードを再コンパイルせずに変更を加える方が簡単です。

関連する問題