Forum
Merhaba; Mvc de view içine controler oluşturarak controler içinde bağlantıkurarak veri çekiyoruz. masterpage içine db den veri çekmek istediğimizde nasıl controler oluşturuyoruz. yada bu tip bir iş için metod nedir?
Merhaba, soruyu biraz daha açar mısınız ?
açıklayayım.
view içindeki bir sayfaya controler içindeki bir controlerden veri çekiyoruz. mesela anasayfacontroler isimli bir controlerimiz olsun. bunun içinde
public ActionResult Giris() bunun altına db den tablo verilerini çekecek kodları giriyoruz. ve giris sayfasındada verileri listeletebiliyoruz. yani giris sayfasına dbvden veri çekmek için controler de ilgili actionresult u dolduruyoruz. ancak benim farklı bir klasörde master page'im var. bunun içinde db den veri çekmek isterken hangi kontrolerin actionresult'ına kod yazmam gerekiyor. yada farklı bir şekilde sorayım. master page içerisinde menü isimlerini dbden çekeceğim.entity data modal ile. bunu nasıl yapabilirim?
Biraz daha açık yazayım. ben master page içine menü koyacağım. ve menü isimleri dinamik olacak. db den çekilecekler. db den kategori isimlerini çekip masterpagenin içine nasıl koyabilirim? bu konuda yardımcı olabilirmisiniz?
Merhaba, bir tane method yazıp bu istediğinizi yapabilirsiniz. Örneğin;
public static IEnumerable<menu> getMenu() {
var result = context.menu.ToList();
return result;
}
gibi.. sonra istediğiniz yerden buna erişip menü elemanlarını çekebilirsiniz.
uzun süre çözmeye çalıştım farklı kaynaklarıda inceledim. ancak çözemedim. bu konuyu dtaylıca anlatabilir misiniz? ilişkili olduğu kısımlarla birlikte?
Böyle bir durumda 2 seçeneğiniz buluyor. Biri direk master page içerisine istediğiniz kodu yazmak. Yani; Razor view engine kullanıyorsanız @{ buraya } aspx kullanıyorsanız <% buraya %> Bu önerilen bir kullanım değildir. 2. bir yöntemde yukarıda ki örnekte belirttiğim gibi bir method yazıp ister master page den ister diğer sayfalardan bu methoda erişip istediğiniz veriyi çekmek yada istediğiniz işlemi yapmak. Verdiğim örneği biraz açayım isterseniz.
menu adında bir entity sınıfım var olduğunu varsayıyorum. Normalde bu class ı controller kısmında nasıl kullanıyorsak aynı şekilde yazdığımız methodda da kullanıyoruz. Aşağıda menu içindeki verinin listesini alıp IEnumerable olarak geriye döndürüyoruz.
public static IEnumerable<menu> getMenu() {
var result = context.menu.ToList();
return result;
}
Master page yada x bir sayfada bunu kullanmak içinde basit bir foreach ile verilerimizi listeliyoruz.
foreach (var item in getMenu())
{
Response.Write(item.adi); // menu içinde adi adında bir alan olduğunu varsayıyorum.
}
Merhaba,
Üç farklı göreve bölerek bunu yapabilirsiniz.
1.Veritabanından item'ların bir listesini nasıl alınır?
Temel olarak;
using (var dbContext = new DbContext())
{
var categoryList = dbContext.MyCategories.ToList();
}
2. View içine controller 'dan items'ların bir listesini nasıl transfer edilir?
Bunu yapmanın en basit yöntemi ViewData sözlüğünü kullanmaktır.Bu dictionary view ve controller için her ikisi içinde geçerlidir.
public ActionResult Index()
{
using (var dbContext = new DbContext())
{
var categoryList = dbContext.MyCategories.ToList();
ViewData["MyCategories"] = categoryList ;
}
return View();
}
3.Bir menü olarak items 'lar nasıl render edilir?
Bu yapmak istediğim menüye bağlı olarak çok spesifik olabilir.Birkaç ürün için bir menü oluşturabilirsiniz.Ayrıca MVC3 için yeni razor view motorunu kullandığını farzedelim.Eğer buna benzer bir şey yapmak istersen;
<ul class="product-menu">
@foreach (var categoryItem in (IEnumerable<MyCategory>)ViewData["MyCategories"]) {
<li>@Html.ActionLink(categoryItem.Name, "Category", "Product", new { id = categoryItem.Id })</li>
}
</ul>
Saygılar,
Neden soru sorduktan sonra insanlar neden teşekkür etmezler hiç anlamamışımdır.
Güzel sordun. Dostum dediğim gibi benim cahilliğime verebilirsin. tam olarak kafamda oturmadı daha. uygulamayı gelişitirirken farklı kısımlarına geçtim bu sıktıntıyı aşamayınca. ve hala bu kısma dönemedim şuan için. döndüğümde anlatılanları harfiyen uygulamaya çalışacağım. ve işin içinden çıkamazsan yine önüme çıkan soruları soracağım diye düşündüğüm için hiç dokunmadım. daha deneme yapmadım bu kısım için yani. ben şimdiden teşekkür ederim. ancak bu kısma gelince takılırsam yazacağım yine inşallah. yardımlarınız için sağolun.
dostum bahsettiğin şekilde yapamadım. 🙁 ancak araştırdığım kadarıyla farklı bir metod denedim. entity data modal oluşturdum. ve controler içinden bir user kontrol oluşturttum. bu user kontrolünede gerekli şekilde db bağlantısını kontrolerin içinden sağladım. ancak şu hatayı veriyor. bir yerde hata yaptım ama sebebini bulamadım çözemedim.
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
|
Bu şekilde diyor. nedir yanlışım acaba? diğer arkadaşlarda bilen varsa yardımcı olabilirmi?
şunu farkettim. controllerden sağ tıklayıp oluşturuyorum sayfayı. oluşan sayfada foreach içinde db nin sutun isimleri yok. yani şu şekilde satırlar gelmiyor.
<% item.adi %>
<% item.soyadi%>
<% item.mail %>
gibi. sanki bunlara ulaşamadan oluşturuyor sayfayı...
nedir sorun tam olarak?
Arkadaşım aşağıda ki videoları şiddetle izlemeni tavsiye ediyorum. Son sorduğun sorulardan hiç bir şey anlamadım 🙁 Videoları izlersen kafanda bir şeyler oluşur diye düşünüyorum. (reklam olarak algılanmasın lütfen)
http://www.apostylee.com/mvc-ye-giris-video/
http://www.apostylee.com/ado-net-entity-framework-e-giris-video/
Bunları daha önce izledim. bak ikinci videoda siz normal sayfalar için list olayını yaptınız ado.net entity data model ile. ben aynısını aspx sayfaya değilde. user kontrol için yapıyorum. ve bu user kontrolüde master pagenin içine gömüyorum bunu yaptığımda hata veriyor. ben kendi uygulamam içinde bir sayfa içine list olayını yaptığımda sorunsuz çalışıyor. ama siz bir deneyim aynı şekilde user kontrol oluşturup bunu master page nin içine koyun. göreceksiniz hatayı şu şekilde bir hata veriyor.
Object reference not set to an instance of an object.
yukarıda tam olarak yazdım. foreach kısmını gösteriyor visual studioda. ve sonra yukardaki hatayı veriyor. zannediyorum bu olayı user kontrol için yapıp masterpage e gömünce farklı bir olay daha yapılması gerekiyor. bu konuda yardımcı olurmusunuz?
Merhaba,
Kullandığın model özelliği için IEnumerable nesnesiyle atanmasını gerekiyor.Bunun için google'da "strongly typed view asp.net mvc" olarak arama yaparsan o zaman istediğin kodları bulabilirsiniz.
Saygılar,