Для тех из вас, кто пытается использовать VB.Net с MVC, я молюсь за вас.Это грубоЕсть редко какие-либо примеры, и некоторые синтаксис недоступен, который доступен в C #.Итак, что касается ответа на мой оригинальный вопрос.Кажется, что именно моя неопытность вызвала мгновенную вспышку вопроса.
После анализа моей проблемы, я нашел способ ее обойти.Прежде всего, позвольте мне уточнить, что я пытался сделать, а затем объяснить, что я сделал.Цель состояла в том, чтобы иметь объект (Ресторан в моем случае).И я хотел, чтобы список свойств (кухни в моем случае) отображался в представлении «Детали», которое я мог бы назначить этому объекту (Ресторан).Свойствами были кухни, которые я настроил в таблице кухонь (CuisineId, Name, Description), и когда вы добавляете кухню в ресторан, она записывает запись в другой таблице RestaurantCuisine (RestaurantCuisineId, RestaurantId, CuisineId).Таким образом, получение списка кухонь было первой задачей и показало их в выпадающем списке.Это было сделано путем создания списка SelectList кухонь в функции представления Details, создав хранилище CuisineRepository и вызвав функцию, которая получает список всех кухонь:
Dim cuiss As New CuisineRepository()
ViewData("Cuisines") = New SelectList(cuiss.FindAllCuisines().ToList(), "CuisineId", "Name")
После того, как вы настроили эту настройку как SelectList, это легкочтобы отобразить это на виде, выполнив следующее:
<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>
Итак, как вы можете видеть, я просто изменяю ссылку якоря, когда пользователь меняет выбранную кухню.,Затем в моем контроллере у меня есть функция настройки для добавления кухни и удаления кухни из ресторана:
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.Мне пришлось передать идентификатор объекта (Restaurant), который требовался для представления Details, и нигде не смог найти синтаксис.Наконец, спустя некоторое время поиска, нашел этот сайт, на котором у парня есть несколько примеров контроллеров и, к счастью, он приводит примеры как C #, так и VB.Чтобы добавить routeValues в RedirectToAction, вы объявляете новый список и используете встроенную строку и добавляете свои значения с точкой (.) Перед ними:
Return RedirectToAction("Details", New With {.id = rid})
Надеюсь, это кому-нибудь поможет.Это определенно повлияло на мое решение использовать MVC.Я продан на 100%, хотя знаю, что по пути я столкнусь с множеством контрольно-пропускных пунктов.