2010-11-21 21 views
1

Bunun daha önce sorulmuş olup olmadığından emin değilim, ancak bir nesnem var (Restoran) ve bu restoranın ayrıntılarını görüyorum. Bu detay görünümünde, restoranın sunduğu mutfakların bir listesini istiyorum. Ayrıca mevcut mutfaklardan oluşan bir açılır listeye de sahip olmak ve "Ekle" düğmesini tıklatmak ve bu mutfağı Restoran'a eklemek istiyorum. Ben ana kimlik anahtarı olan bir mutfağı tablodan mutfağı kimliği yabancı bir anahtarı olan bir RestaurantCuisine tablo (Varlık Çerçeve kullanarak) var.MVC2 Başka Bir Nesneye Nesnenin Koleksiyonunu Ekleme

Şimdi, sorum, şimdi bunu nasıl yapabilirim? Oluşturma görünümünün arkasındaki kavramı ve sonra da Görünüm yayınını anladım, ancak bu durumda, Restoran nesnesini geri göndermiyorum. Restoranın restoran koleksiyonuna ekleyebilmem için restoran kimliğini ve Mutfak Kimliği'ni nasıl alabilirim?

Şimdi, daha fazla araştırdıktan sonra, yanlış soruyu sorduğuma inanıyorum. Benim asıl meselem, bir Restoranın ayrıntılarını görüntüleyen bir Görünümüm var ve bunun için benim denetleyicimde bir Ayrıntılar işlevim var. Bu iyi çalışıyor. Yapmak istediğim bir sonraki adım, bu restoranın sunduğu ve yanındaki 'Ekle' düğmesine sahip olan mevcut bir restorana sahip bir açılır listeye sahip olmak. Ve 'Ekle' düğmesine tıklarsanız, açılan menüden öğenin değerini Restoran nesnesindeki mutfakların kurulumu koleksiyonuna ekler.

Bu "kolayca" mümkün mü? MVC2 :(

'a olan inancımı kaybetmeye başlıyorum. Son olarak burada deneyin.Bunu sormama izin ver, bir açılır listeye nasıl sahip olacağımı bilen var mı (şimdi bunu oluşturdum) ve bir "Ekle" düğmesi var onun yanında, ve bu açılan listeden seçilen değeri olsun?

cevap

0

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.

+0

Sen cesur bir adamsın. – rboarman

İlgili konular