对于那些试图使用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