2016-08-16 11 views
-2

私はあなたが私を助けてくれることを願っています。私はdropdownlist.Thereにいくつかの問題を抱えています。私の選択リストは、私がGroupByを使用してこのように避けていますが、2つのActionResult Createクラスは、 parametres.Andそれは動作しません。ここ は私のコントローラのコードです:ドロップダウンリスト内のユニークなアイテム

public ActionResult Create(Flight flight) 
{ 

     var departures = db.Flights.Where(m => m.Departure == flight.Departure) 
     .OrderBy(m => m.Departure) 
     .Select(i => i.Departure) 
     .Distinct(); 
    ViewBag.Departure = new SelectList(departures); 
    ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "Name"); 
    ViewBag.TransportId = new SelectList(db.Transport, "TransportId", "Name"); 
    return View(); 
} 


[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "Id,FlightId,Departure,Destination,Day,DepartureTime,ArrivalTime,Seats,Cost,TransportId,CompanyId")] Flight flight) 
{ 
    try 
    { 
    if (ModelState.IsValid) 
    { 
     db.Flights.Add(flight); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    } 
    catch (DataException /* dex */) 
    { 
     //Log the error (uncomment dex variable name and add a line here to write a log. 
     ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator."); 
    } 
    var departures = db.Flights.Where(m => m.Departure == flight.Departure) 
     .OrderBy(m => m.Departure) 
     .Select(i => i.Departure) 
     .Distinct(); 
    ViewBag.Departure = new SelectList(departures); 
     ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "Name", flight.CompanyId); 
    ViewBag.TransportId = new SelectList(db.Transport, "TransportId", "Name", flight.TransportId); 
    return View(flight); 
} 

あなたは私が私のドロップダウンリストで唯一のユニークなアイテムを持っていると思います見ての通り。

@Html.DropDownList("Departure", null, htmlAttributes: new { @class = "form-control" }) 

私はこの

public ActionResult Create(Flight flight) 
{ 

     var departures = db.Flights.Where(m => m.Departure == flight.Departure) 
     .OrderBy(m => m.Departure) 
     .Select(i => i.Departure) 
     .Distinct(); 
    ViewBag.Departure = new SelectList(departures); 
    ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "Name"); 
    ViewBag.TransportId = new SelectList(db.Transport, "TransportId", "Name"); 
    return View(); 
} 

をすれば、私は同じパラメータを使用してエラーが発生しています。

この方法が明らかに間違っている場合。

public ActionResult Create() 
    { 

     ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "Name"); 
     ViewBag.TransportId = new SelectList(db.Transport, "TransportId", "Name"); 
     return View(); 
    } 

「System.InvalidOperationException」種類の例外がSystem.Web.Mvc.dllで発生したが、ユーザーコードで処理されなかった

追加情報:「IEnumerableを」タイプの一切のViewData項目が存在しないことキー「出発」を持っています。

GETアクションでそれをどのようにコーディングする必要がありますか?GETアクションで私のViewbagを設定する方法は?

+2

あなたの質問は不明です!最初の 'Create'で' Distinct'を適用するのが難しくなるのはなぜですか? – techspider

+0

なぜ 'ViewBag.Departure'に2つの異なるデータセットがあるのですか?ビューに戻る前に、両方のアクションメソッドでITが同じである必要があります。 – Shyju

+0

また、非値型(Ex:複雑な型のプロパティで、おそらく 'EqualsTo'を実装したいと思っています)で' Distinct'を行うことを忘れないでください。コメントにコードを追加しないでください。元の質問に追加** – Shyju

答えて

0

あなたのかみそりビューのコードは、名前DepartureとViewBagを期待しています。だからあなたのGETアクションでそれを設定してください。

public ActionResult Create() 
{ 
    var departures = db.Flights.OrderBy(m => m.Departure) 
                .Select(i => i.Departure).Distinct(); 
    ViewBag.Departure = new SelectList(departures); 
    ViewBag.CompanyId = new SelectList(db.Companies, "CompanyId", "Name"); 
    ViewBag.TransportId = new SelectList(db.Transport, "TransportId", "Name"); 
    return View(); 
} 

以下のコードが表示されているものとします。

@Html.DropDownList("Departure", null, htmlAttributes: new { @class = "form-control" }) 

これは、「キー 『出発』を持っているタイプ 『IEnumerableを』は何のViewData項目がありませんを。」あなたのエラーを修正する必要があります

FlightテーブルのすべてのユニークなDeparture列の値を表示すると仮定します。サブセットが必要な場合は、必要に応じてLINQ式のWhere句を使用します。

+0

ありがとう!物事は、GroupByの代わりにOrderByを使用していたので、今すぐ取得します。そして、申し訳ありませんが、 – Daniil

0

あなたはここで間違ったことをしています。あなたの最初の作成(GET)はあなたの飛行を取り込むべきではありません。それはまったく使用されていません。利用可能な出発の種類を知るために飛行オブジェクトを持っていなければならない場合は、飛行IDを取り込んでDBで見つけることができます。

リストについては、選択リストを作成する新しいクラスを作成します。それからあなたの視点から、あなたはそれを呼び出すことができます。そのような観点から

public static class SelectListsHelper 
{ 
    public static SelectListsHelper Instance { get; } = new SelectListsHelper(); 

    public static List<SelectListItem> GetDepartures(long flightId) 
    { 
     var list = new List<SelectListItem>() 

     //Build up your list here. 

     return list; 
    } 
} 

コール:

@Html.DropDownListFor(model => model.Departure, SelectListHelper.Instance.GetDepartures(Model.Id)) 
関連する問題