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%売れています。
あなたは勇敢な男です。 – rboarman