2016-12-06 15 views
1

Dapperを使用してMVCのドロップダウンリストコントロールをバインドするために、&を入力しようとしています。オンラインで良い例を見つけるのに問題があります。私は静的に定義されたドロップダウンをデータベース(「男性」または「女性」のような)を更新するためにバインドする方法の例をたくさん見つけることができ、それを動作させることができます。また、データベースからドロップダウンする例もたくさんありますが、それらを連動させることはできません。RazorとMVCを使用してドロップダウンリストを取り込む方法は?

私のProjectManifest/Createフォームに、現在のプロジェクトでドロップダウンが設定されていればいいだけです。

私はこの質問をよくすることを望みましたが、私が間違っていることは分かりません。私は自分のコードでさまざまなチュートリアルや質問をStackOverflowで数十回試してみました。私がVisual Studioから受け取ったエラーはあまり役に立たず、通常NullReferenceの例外に過ぎず、何がnullであるか分からないHTMLヘルパ関数呼び出しには非常に多くの変数があります。

私はこの問題は私のインデックスファイルに、私はラムダ式やどのような期待はHTMLヘルパー「DropDownListFor」または「DropDownListコントロール」

の引数にあることがあるを理解していないと思いIndexビュー

@using (Html.BeginForm("Index", "ProjectManifests", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    .... 
    @Html.LabelFor(model => model.ManifestID) 
    @Html.EditorFor(model => model.ManifestID) 
    @Html.ValidationMessageFor(model => model.ManifestID) 

    @Html.DropDownListFor(model => model.ProjectID, Model.Projects) 
    .... 

    <input type="submit" value="Create" class="btn btn-default" /> 
} 

コントローラ

public class ProjectManifestsController : Controller 
{ 
    [HttpGet] 
    public ActionResult Index() 
    { 
     Models.ProjectManifestModel model = new Models.ProjectManifestModel(); 
     DatabaseHelper.ConnectionString = ConfigurationManager.ConnectionStrings["MTConnectionString"].ConnectionString; 
     ProjectRepository pr = new ProjectRepository(); 
     List<SelectListItem> projects = new List<SelectListItem>(); 
     foreach (Project p in pr.GetProjects()) 
     { 
      projects.Add(new SelectListItem { Value = p.ProjectID.ToString(), Text = p.ProjectName }); 
     } 
     model.Projects = projects; 
     ViewBag.Projects = projects; 
     return View(); 
    } 
} 

のViewModel

public class ProjectManifestModel 
{ 
    [Key] 
    public int ManifestID { get; set; } 
    public int ProjectID { get; set; } 
    .... 
    public HttpPostedFileBase Attachment { get; set; } 
    public IEnumerable<SelectListItem> Projects { get; set; } 

} 

このコードの状態が異なるエラーが発生し、私の謝罪:

Compiler Error Message: CS1503: Argument 3: cannot convert from 'System.Collections.Generic.IEnumerable<Poscarp.TabLibrary.Project>' to 'System.Collections.Generic.IEnumerable<System.Web.Mvc.SelectListItem>'

Source Error:

Line 29: @Html.DropDownListFor(model => model.ProjectID, Model.Projects)

+0

NullReferenceExceptionsは非常に参考にすることができ役に立てば幸い

@Html.DropDownList("ProjectID", (SelectList)@ViewBag.SelectList, "-select-", htmlAttributes: new { @class = "form-control" }) 

を使用しましたか? nullは何ですか? – GregH

+0

あなたが表示したコードは、表示されているエラーを生成しません - タイプ 'System.Int32'のキー 'ProjectID'を持つ_The ViewDataアイテムを生成しますが、 'IEnumerable ' _ –

+0

'Projects'プロパティが' IEnumerable '(' IEnumerable 'ではなく)の場合にのみ、表示されたエラーが生成されます。 –

答えて

1

ProjectManifestModelはindex.cshtmlでのモデルであると仮定するとは、次のことを試してください。

return View(model); 

彼はモデルとして別のクラスを取っているようです。 ProjectManifestsControllerのIndexメソッドで

0

は、あなたがSelectListのSelectListItemsを節約し、ViewBagのビューにSelectListのを渡してみましたか?

var selectList = new SelectList(projects, "Value", "Text"); 
ViewBag.SelectList = selectList; 

更新、あなたが特定のPROJECTIDを持っている場合は、その後、SelectListの

var selectList = new SelectList(projects, "Value", "Text", "ProjectID"); 
ViewBag.SelectList = selectList; 
の4番目のパラメータとして渡す、 のDropDownListで選択しておく必要があります。このような

SelectListItemsSelectedのいずれかを設定することもできます。foループに到達します。

インデックスインデックスビューでメソッド

[HttpGet] 
    public ActionResult Index() 
    { 
     Models.ProjectManifestModel model = new Models.ProjectManifestModel(); 
     DatabaseHelper.ConnectionString = ConfigurationManager.ConnectionStrings["MTConnectionString"].ConnectionString; 
     ProjectRepository pr = new ProjectRepository(); 
     List<SelectListItem> projects = new List<SelectListItem>(); 
     foreach (Project p in pr.GetProjects()) 
     { 
      projects.Add(new SelectListItem { Value = p.ProjectID.ToString(), Text = p.ProjectName }); 
     } 
     model.Projects = projects; 
     ViewBag.Projects = projects; 
     //new code below 
     var selectList = new SelectList(projects, "Value", "Text"); 
     ViewBag.SelectList = selectList; 
     return View(); 
    } 

、あなたはそれを鋳造後ViewBagからSelectListの@ Html.DropDownListヘルパーを使用することができます。

@Html.DropDownList("ProjectID", (SelectList)@ViewBag.SelectList) 

上記と同じですが、今回はオプションラベル( "-select-")とHTML attr ibutesは、私が実際のエラーで何の上に掲示コードで...これは

関連する問題