对于那些试图将VB.Net与MVC结合使用的人,我为你们祈祷。很粗糙。很少有示例,而且有些语法在C#中不可用。所以,就我最初问题的答案而言。似乎是我的经验不足引起了这个问题的突然爆发。
在分析了我的问题之后,我想出了一个解决办法。首先,让我澄清一下我想做什么,然后解释一下我做了什么。目标是要有一个对象(在我的情况下是餐厅)。我想在Details视图上显示一个属性列表(在我的例子中是菜系),我可以将其分配给那个对象(餐厅)。这些属性是我在菜谱表中设置的菜谱(菜谱ID、名称、描述),当您向餐厅添加菜谱时,它会在另一个餐厅菜谱(RestaurantCuisineId、RestaurantId、CuisineId)中写入记录。因此,获取菜系列表是第一个任务,并将其显示在下拉列表中。这是通过在Details view函数中创建一个菜系选择列表来完成的,方法是创建一个菜系存储库并调用一个获取所有菜系列表的函数:
Dim cuiss As New CuisineRepository()
ViewData("Cuisines") = New SelectList(cuiss.FindAllCuisines().ToList(), "CuisineId", "Name")
将此设置设置为选择列表后,可以通过执行以下操作在视图上轻松显示:
<h3>Cuisines:</h3>
<br />
<%= Html.DropDownList("Cuisines")%>
所以,这之后的问题才是真正的问题。我想要一个ActionLink,它将绑定到DropDownList的值。我这次尝试失败了。但幸运的是,我的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>
所以,如您所见,我只是在用户更改所选美食时修改锚的ref。然后,在我的控制器中,我有一个功能设置,可以添加一种菜肴并从餐厅中移除一种菜肴:
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
Return RedirectToAction("Details", New With {.id = rid})
我希望这对某人有帮助。这确实改变了我使用MVC的决定。尽管我知道我会遇到很多路障,但我还是100%被卖掉了。