2016-10-31 4 views
0

MVCを使用していて、[作成]ビューで複数のマルチ選択ボックスが必要です。MVC C#が異なるタイプで同じ操作を実行する

私は私がやりたいことに成功したが、明らかに私はしたくないコードの繰り返しでいる:

マイモデル:

public class ReportCreateModel 
{ 

    public MultiSelectList allDBtables; 
    public MultiSelectList allfrequencies; 
    public MultiSelectList allsql; 

} 

マイコントローラーを:

private Context db = new Context(); 

public ActionResult Create() 
{ 

    ReportCreateModel rcm = new ReportCreateModel(); 

    //frequencies 
    List<SelectListItem> frequencyItems = new List<SelectListItem>(); 
    foreach (Frequency f in db.dbFrequency.ToList()) 
    { 

     SelectListItem item = new SelectListItem 
     { 
      Text = f.frequencyName, 
      Value = f.frequencyID.ToString() 
     }; 

     frequencyItems.Add(item); 

    } 

    //systems 
    List<SelectListItem> systemItems = new List<SelectListItem>(); 
    foreach (DataSystem s in db.dbSystem.ToList()) 
    { 

     SelectListItem item = new SelectListItem 
     { 

      Text = s.systemName, 
      Value = s.systemID.ToString() 

     }; 

     systemItems.Add(item); 

    } 

    //SQL 
    List<SelectListItem> sqlItems = new List<SelectListItem>(); 
    foreach (SQL s in db.dbSQLUsed.ToList()) 
    { 

     SelectListItem item = new SelectListItem 
     { 

      Text = s.SQLName + " (" + s.sqltypes.SQLTypeName + ")", 
      Value = s.SQLID.ToString() 

     }; 

     sqlItems.Add(item); 

    } 

    rcm.allfrequencies = new MultiSelectList(frequencyItems, "Value", "Text"); 
    rcm.allsystems = new MultiSelectList(systemItems, "Value", "Text"); 
    rcm.allSQL = new MultiSelectList(sqlItems, "Value", "Text"); 

    return View(rcm); 

} 

これは、のように動作します必要と私はMultiSelectListsから自分のビューでリストボックスを作成することができます誰かが私はコードを減らすことができますので、私はちょうど1つのコードブロックをコードを実行することができます示唆してください(dbFrequency、dbSystem、dbSQLUsed)

+1

これは[Code Review SE](http://codereview.stackexchange.com/)に投稿してください。 –

+0

@MatiasCiceroコード全体を変更してもコードレビューに投稿するべきではありません –

答えて

0

、しかし、それはコンパイルおよびビューで正しく表示するために得るためにそれを適応しなければならなかった:

public ActionResult Create() 
{ 
    ViewBag.AllSystems = new MultiSelectList(db.dbSystem.Select(x=>new { Name=x.systemName, Value=x.systemId }),"Value","Name"); 
    return View(); 
} 

-3

そのコードはほとんどガベージ(コンパイルされません)とノイズです。一貫性のあるcapitalizationを使用して開始します(プロパティallsqlを別の場所に、allSQLを別の場所に、プロパティallsystemsを別の場所に、allDBtablesを別の場所にコールします)。その後、不要なものをしないでください。

private Context db = new Context(); 

public ActionResult Create() 
{ 
    return View(new ReportCreateModel 
    { 
     AllSystems = new MultiSelectList(db.dbSystem,"systemName","systemId"), 
     AllFrequencies = new MultiSelctList(db.dbFrequencies, "frequencyName", "frequencyID"), 
     AllSql = new MultiSelectList(db.dbSQl.Select(s=>new {NAME=s.SQLName + " (" + s.sqltypes.SQLTypeName + ")",SQLID=s.SQLID}),"NAME","SQLID") 
    }); 

} 

あなたはさらに、データベースへのアクセスを最適化したい場合は、これだけのように、あなたが実際に必要とする性質を尋ねる:

private Context db = new Context(); 

public ActionResult Create() 
{ 
    return View(new ReportCreateModel 
    { 
     AllSystems = new MultiSelectList(db.dbSystem.Select(x=>new { Name=x.systemName, Value=s.systemId }),"Name","Value"), 
     AllFrequencies = new MultiSelectList(db.dbFrequencies.Select(x=>new { Name=x.frequencyName, Value=x.frequencyID }), "Name", "Value"), 
     AllSql = new MultiSelectList(db.dbSQl.Select(s=>new { Name=s.SQLName + " (" + s.sqltypes.SQLTypeName + ")", Value=s.SQLID}),"Name","Value") 
    }); 

} 

シンプルな資本税制:一般的なルールとして 、それは「SQLです"、" SQL "ではありません。 "allDBtables"は "AllDbTables"または "AllDBTables"である必要があります。 "allfrequencies"は "AllFrequencies"でなければなりません。 "allsql"は "AllSql"でなければなりません。

実際に、それはなるだろう。その場合にはViewBagに、ではないのviewmodelにドロップダウン値、投げるのが通例である:MultiSelectListはUIコントロールであるとして、それは本当にいけない次に

public ActionResult Create() 
{ 
    ViewBag.AllSystems = new MultiSelectList(db.dbSystem.Select(x=>new { Name=x.systemName, Value=s.systemId }),"Name","Value"); 
    ViewBag.AllFrequencies = new MultiSelectList(db.dbFrequencies.Select(x=>new { Name=x.frequencyName, Value=x.frequencyID }), "Name", "Value"); 
    ViewBag.AllSql = new MultiSelectList(db.dbSQl.Select(s=>new { Name=s.SQLName + " (" + s.sqltypes.SQLTypeName + ")", Value=s.SQLID}),"Name","Value"); 
    return View(); 
} 

をコントローラーに表示されることさえあります(懸念の分離)。そして、それは単純になる:私はロバート・マッキーの溶液中で(最後から二番目)コードを使用

public ActionResult Create() 
{ 
    ViewBag.AllSystems = db.dbSystem.Select(x=>new { Name=x.systemName, Value=s.systemId }); 
    ViewBag.AllFrequencies = db.dbFrequencies.Select(x=>new { Name=x.frequencyName, Value=x.frequencyID }); 
    ViewBag.AllSql = db.dbSQl.Select(s=>new { Name=s.SQLName + " (" + s.sqltypes.SQLTypeName + ")", Value=s.SQLID}); 
    return View(); 
} 
+0

役に立たなかったので3回ダウン投票しましたが、OPは自分の答えを投稿しました彼らは私の答えを使っていると言った。それは明らかに有用でした。しかたがない。 –

関連する問題