MVC ile VB.Net'i kullanmaya çalıştığınız için, sizin için bir dua söylüyorum.Çok zorlu.Çok nadiren herhangi bir örnek var, ve bazı Bu sözdizimi C# 'da kullanılabilir IS mevcut değil. Asıl soruya verdiğim cevapta, sanki bu sorunun anlık parıltısına neden olan deneyimsizliğimdi.
Sorunumu analiz ettikten sonra, düşündüm etrafında bir yol dışarı. Ne yapmaya çalıştığımı açıklığa kavuştum, sonra ne yaptığımı açıkla. Amaç bir nesneye sahip olmaktı (Benim durumumda Restoran). Ve o nesneye (Restoran) atayabileceğim Ayrıntılar görünümünde görüntülenen özelliklerin bir listesini (benim durumumdaki mutfaklar) sahip olmak istedim. Özellikleri, bir Cuisine (Mutfak, Adı, Açıklama) bir tabloya ayarla vardı ve bir restorana bir mutfak eklediğinizde, bir başka tablo RestaurantCuisine (RestaurantCuisineId, RestaurantId, CuisineId) bir kayıt yazıyordu. Böylece, mutfakların listesini almak ilk görevdi ve bir açılır listede görünmesini sağladı. Yani Ayrıntılar mutfakları SelectList oluşturarak yapıldığını bir CuisineRepository oluşturma ve tüm mutfakları bir listesini alır bir işlevi çağırarak işlevini görmek: Bir SelectList olarak bu ayarı gerçekleştirdikten sonra
Dim cuiss As New CuisineRepository()
ViewData("Cuisines") = New SelectList(cuiss.FindAllCuisines().ToList(), "CuisineId", "Name")
, bu gösterilecek kolay Bu, aşağıdakileri yaparak:
<h3>Cuisines:</h3>
<br />
<%= Html.DropDownList("Cuisines")%>
Yani, bundan sonra sorun asıl sorun oldu. DropDownList'in değerine bağlı olacak bir ActionLink sahibi olmak istedim. Bu girişimde başarısız oldum. Ama neyse ki, benim jQuery tozlu değildir bu yüzden aşağıdakileri yaparak biraz sihirli gerçekleştirilen: Yani
<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>
, gördüğünüz gibi, kullanıcının seçtiği Mutfağı değişeceği gibi, ben sadece çapanın href değiştirin.Sonra, benim denetleyicisi, bir fonksiyon kurulum bir mutfağı eklemek ve bir restorandan bir mutfağı kaldırmak zorunda:
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
Bildirimi RedirectToAction. Nesnenin (Restoran) kimliğini, Ayrıntılar görünümünde gerekli ve sözdizimini herhangi bir yerde bulamadım. Sonunda, bir süre arandıktan sonra, bu sitenin, erkeğin birkaç kontrolör örneğine sahip olduğunu ve neyse ki hem C# hem de VB'nin örneklerini verdiğini buldu. RedirectToAction için routeValues eklemek için, yeni bir liste ilan ve bir inline kullanmak ve bunları önceki bir döneme ile değerleri ekleyin (.):
Return RedirectToAction("Details", New With {.id = rid})
bu kimse yardımcı olur. MVC kullanma kararımdaki farklılığı kesin olarak belirledim. Yol boyunca birçok roadblock'a gideceğimi bilmeme rağmen% 100 satıyorum.
Sen cesur bir adamsın. – rboarman