對於那些試圖使用VB.Net和MVC的人,我正在爲你禱告,這很粗糙,很少有例子,有些語法是不可用的在C#中可用。所以,就我原來的問題的答案。似乎是我的經驗不足,導致了問題的即時耀斑。解決它的方法。首先,樂我要澄清我正在嘗試做什麼,然後解釋我做了什麼。目標是有一個對象(餐廳在我的情況)。我想要在Details視圖中顯示我可以分配給該對象(餐廳)的屬性(在我的情況下爲美食)列表。這些屬性是我在美食表(CuisineId,Name,Description)中設置的美食,當您向餐廳添加美食時,它會在另一個餐廳RestaurantCuisine(RestaurantCuisineId,RestaurantId,CuisineId)中創建一條記錄。因此,獲得菜單清單是第一項任務,並將其顯示在下拉列表中。通過創建一個CuisineRepository並調用得到所有美食列表的功能,這是通過建立在詳細的菜餚的選擇列表進行瀏覽功能:
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。我必須傳遞Details視圖所需的對象(Restaurant)的id,並且無法在任何地方找到語法。最後,經過一段時間的搜索,發現這個網站有一些控制器的例子,幸運的是他給出了C#和VB的例子。要routeValues添加到RedirectToAction,你聲明一個新的列表,並使用與內聯和帶期間之前將它們添加你的價值觀(。):
Return RedirectToAction("Details", New With {.id = rid})
我希望這可以幫助別人。它肯定會影響我使用MVC的決定。儘管我知道我會一路遇到很多障礙,但我仍然100%出售。
你是個勇敢的人。 – rboarman 2010-11-22 23:25:18