2010-11-21 10 views
1

これは前に尋ねられていますが、オブジェクト(レストラン)があり、そのレストランの詳細ビューがあります。その詳細な見解では、私はレストランが提供する料理のリストを持っていたい。私はまた、利用可能な料理のドロップダウンリストを持っているし、 "追加"ボタンをクリックする能力を持っているし、レストランにその料理を追加します。私はIDの主キーを持つCuisineテーブルからの料理のIDの外部キーを持つRestaurantCuisineテーブル(Entity Frameworkを使用)を持っています。MVC2オブジェクトのコレクションを別のオブジェクトに追加する

だから今、私の質問、どうしたらいいですか?私はsortofの背後にあるコンセプトを理解してから、Createビューの投稿を理解していますが、この場合はRestaurantオブジェクトをポストしていません。では、レストランIDと料理IDを取得してレストランの料理コレクションに追加するにはどうすればよいですか?

私は間違った質問をしました。私の実際の問題は、私はレストランの詳細を表示するビューを持っていると私はそれのための私のコントローラ内の詳細機能があります。これは正常に動作します。次のステップは、このレストランで提供されている利用可能な料理をドロップダウンリストに表示し、その横に[追加]ボタンがあることです。 「追加」ボタンをクリックすると、ドロップダウンリストの項目の値がレストランオブジェクトの料理の集合に追加されます。

これは簡単に可能ですか?私はMVC2で私の信念を失い始めている:(

ここで最後に試してみてください。誰かがドロップダウンリストを持っている方法を知っていますか?そのドロップダウンリストから選択した値を取得しますか?

答えて

0

MVCでVB.Netを使用しようとしている人のために、私はあなたに祈りを言っています。 C#で利用可能な構文がありませんので、私の元の質問への答えに限ります。質問の即時のフレアを引き起こしたのは私の経験不足のようです。

私の問題を分析した後、まずそれを回避する。私は何をしようとしているのかを明確にして、私が何をしたのかを説明します。目標はオブジェクト(私の場合はレストラン)を持つことでした。そして私はそのオブジェクト(レストラン)に割り当てることができる詳細ビューに表示されたプロパティ(私の場合の料理)のリストを持っていたいと思っていました。プロパティは、私が料理のテーブル(CuisineId、名前、説明)に設定した料理で、レストランに料理を追加すると、別のテーブルRestaurantCuisine(RestaurantCuisineId、RestaurantId、CuisineId)にレコードが書き込まれます。だから、料理のリストを取得することが最初の仕事であり、それらをドロップダウンリストに表示させる。それはCuisineRepositoryを作成し、すべての料理のリストを取得する関数を呼び出すことによって機能を詳細ビューで料理のSelectListのを作成することによって行った:

Dim cuiss As New CuisineRepository() 
     ViewData("Cuisines") = New SelectList(cuiss.FindAllCuisines().ToList(), "CuisineId", "Name") 

あなたはSelectListのように、この設定をしたら、それが表示するのは簡単です次のようにして表示することができます。

<h3>Cuisines:</h3> 
<br /> 
<%= Html.DropDownList("Cuisines")%> 

したがって、この後の問題は本当の問題でした。 DropDownListの値にバインドされるActionLinkが必要でした。私はこの試みに失敗しました。しかし幸いにも、私のjQueryのは埃っぽいではないので、私は次の操作を行って、ちょっとした魔法を行わ:だから

<script type="text/Javascript"> 
    $(document).ready(function() { 
     $('#Cuisines').change(function (e) { 
      $('#SelectedCuisine').val($('#Cuisines').val()); 
      setHref($(this).val()); 
     }); 

     setHref($('#Cuisines').val()); 
    }); 

    function setHref(val) { 
     if (val) { 
      $("#addCuisine").attr('href', '/Restaurant/AddCuisine/' + $('#RestaurantId').val() + '?cuisineId=' + val); 
     } 
    } 

</script> 
<h3>Cuisines:</h3> 
<br /> 
<%= Html.DropDownList("Cuisines")%> 
<a id="addCuisine" href="">Add</a> 

、あなたが見ることができるように、ユーザが選択した料理を変更するよう、私は単純にアンカーのhrefを変更します。私のコントローラーでは、料理を追加したり、レストランから料理を取り除く機能の設定があります。

Function AddCuisine(ByVal id As Guid, ByVal cuisineId As String) As ActionResult 
     Try 
      If ModelState.IsValid Then 
       'Dim selcuisInp As HtmlInputHidden = ViewData("SelectedCuisine") 
       Dim selectedCuisineId As Guid = New Guid(cuisineId) 

       Dim rc As New RestaurantCuisine 
       rc.RestaurantCuisineId = Guid.NewGuid 
       rc.RestaurantId = id 
       rc.CuisineId = selectedCuisineId 
       'rc.CuisineId = New Guid(selList.SelectedValue.ToString) 
       rc.CreatedDate = DateTime.Now() 
       'rc.CreatedBy = 
       db.AddToRestaurantCuisines(rc) 
       db.SaveChanges() 
      End If 

      Return RedirectToAction("Details", New With {.id = id}) 
     Catch e As Exception 
      Dim innerE As String = e.InnerException.ToString 
      Return RedirectToAction("Details", New With {.id = id}) 
     End Try 
    End Function 

    Function DeleteRestaurantCuisine(ByVal id As Guid) As ActionResult 
     Dim rc = (From rcs In db.RestaurantCuisines 
        Where rcs.RestaurantCuisineId = id 
        Select rcs).Single() 

     Dim rid As Guid = rc.RestaurantId 

     Try 
      db.RestaurantCuisines.DeleteObject(rc) 
      db.SaveChanges() 

      Return RedirectToAction("Details", New With {.id = rid}) 

     Catch ex As Exception 
      Return RedirectToAction("Details", New With {.id = rid}) 
     End Try 
    End Function 

RedirectToActionに注目してください。詳細ビューが必要で、どこでも構文を見つけることができなかったオブジェクト(レストラン)のIDを渡さなければなりませんでした。最後に、しばらくの間検索してみると、このサイトにはコントローラーの例がいくつかあり、運良くC#とVBの両方の例があります。 RedirectToActionにrouteValuesを追加するには、新しいリストを宣言し、とインラインを使用し、それらの前にピリオドを使用して値を追加します(。):

Return RedirectToAction("Details", New With {.id = rid}) 

私は、これは誰かに役立ちます願っています。 MVCを使用するという私の決定に違いはありました。私は道に沿って多くの障害に遭遇することを知っていますが、私は100%売れています。

+0

あなたは勇敢な男です。 – rboarman

関連する問題