core mvc controller tarafında tanımlanan ayları view tarafında select ile nasıl gösterebiliriz

Kodla Büyü

hakimiyet001

Seçkin Üye
Seçkin Üye
Mesajlar
415
core mvc controller tarafında tanımlanan ayları view tarafında select ile nasıl gösterebiliriz
 
Controller'daki action'da SelectList oluşturarak bunu ViewData'ya atayınız.
View'de ise ViewData'daki SelectList'i cast ederek alınız.
Son olarak açılır listeye asp-items ile bu listeyi bağlayınız.
 

Ekli dosyalar

  • action.png
    action.png
    9.5 KB · Görüntüleme: 76
  • view.png
    view.png
    15.2 KB · Görüntüleme: 74
var iller = new List<Sehirler>
{
new Sehirler{ Id=1, ilAdi="Ankara", secmenSayisi=250000},
new Sehirler{ Id=2, ilAdi="İzmir", secmenSayisi=200000},
new Sehirler{ Id=3, ilAdi="İstanbul", secmenSayisi=300000},
new Sehirler{ Id=4, ilAdi="Konya", secmenSayisi=180000},
new Sehirler{ Id=5, ilAdi="Trabzon", secmenSayisi=150000},
new Sehirler{ Id=6, ilAdi="Van", secmenSayisi=90000},
new Sehirler{ Id=7, ilAdi="Gaziantep", secmenSayisi=120000},
new Sehirler{ Id=8, ilAdi="Antalya", secmenSayisi=190000},
new Sehirler{ Id=9, ilAdi="Bursa", secmenSayisi=170000},
new Sehirler{ Id=10, ilAdi="Samsun", secmenSayisi=140000}
};

controller tarafında tanımlı bu listeyi view tarafında select ile nasıl gösterebilirim
 
Core mvc yi anlamadım bir turlu. Asp.nette iki dakikada yapılan iş bu kadar zor olmamalı. Select ile liste nasıl yapılır. Seçilen ilin seçmen sayısı nasıl bulunur bunu bilen varmi icinizde
 
Model her zaman tekil olarak düşünülür. (Sehir) Bu model'den bir liste yapıldığı zaman liste çoğul olarak düşünülür (sehirler).
Şimdi burada view'e iki tane veri gönderilmesi gerekiyor.
Birincisi şehirler listesi. Bu liste ile açılır liste yapılacak.
İkincisi ise seçili olan şehir. Bu seçili şehrin seçmen sayısını ekranda göstereceğiz.
Burada benim tercih ettiğim yöntem iki veriyi tuple olarak göndermek.
Kaynak:
Diğer seçenek ise verilerin birini ViewData'ya koymak, diğer veriyi model olarak göndermek olabilir. Tercih meselesi tabiki.
Ekteki görsellere bakınız.
 

Ekli dosyalar

  • model.png
    model.png
    12 KB · Görüntüleme: 19
  • controller.png
    controller.png
    95 KB · Görüntüleme: 19
  • view.png
    view.png
    48.3 KB · Görüntüleme: 17
  • sonuc.png
    sonuc.png
    11.4 KB · Görüntüleme: 18
Select etiketinde onchange olayi gerçekleştiği an seçilen şehre ait seçmen sayısını nasıl bulabiliriz
 
onchange olayında formun postalanarak mı listelemesini istiyorsunuz? Yoksa postalanmadan javascript ile mi listesin istiyorsunuz?
 
Javascript/jquery ile yapalım.
Action'dan model olarak sadece liste gönderilir.
Şehire ait 3 tane veri var. Id verisi seçeneklerin value'sine, şehir adı text'ine ve seçmen sayısı da seçeneklere data verisi olarak view'de eklenir.
Gerisi javascript ve jquery ile halledilir. Yerleşik olarak mvc projelerinde jquery vardır.
 

Ekli dosyalar

  • model.png
    model.png
    12 KB · Görüntüleme: 25
  • action.png
    action.png
    59 KB · Görüntüleme: 23
  • view.png
    view.png
    49.3 KB · Görüntüleme: 19
  • sonuc.png
    sonuc.png
    7.5 KB · Görüntüleme: 24
eline sağlık hocam isime yaradı. Ancak view sayfasında form etiketiyle post işlemi yapan web sayfasında @section Scripts{ ... } kısmında yazılanlar çalışmadı sebebini anlamadım
 
Sayfa post edildiğinde select ile listelenen illeri tekrar gönderiyormuyuz çünkü model null Hatası aldik
 
View sayfalarına dikkat ettiyseniz HTML, HEAD, BODY gibi bir web sayfasında olması gereken etiketlere sahip değil. Çünkü MVC projlerinde şablon mantığı vardır. Views/Shared/_Layout.cshtml sayfası şablon sayfasıdır. İstemci bir sayfa istediği zaman o sayfanın view'i şablonda @RenderBody() kısmını yerleştirilerek render edilir. Yani şablon ve view birleşerek ortaya bir bütün sayfa çıkmış olur.
Şablonda doğal olarak JQuery kütüphanesi alt kısımda bağlıdır. Dikkat ederseniz en altta @await ile başlayan bir script section'ı yani script bölümü vardır. Bunun anlamı eğer view'de bir javascript yazılacaksanız bunun script adında bir bölüme yazın, bu script kodları şablonda en alttaki script bölümüne yerleştirilecek demektir.
Özetle view'deki html içeriği şablonda @RenderBody() kısmına yerleştirilirken, script kodları ise şablonda @await ile başlayan script bölümüne yerleştirilerek bir bütün sayfa render edilmiş olur. (Ekteki görsel1'e bakınız)
Eğer siz kendiniz bir şablon yaptıysanız bu bölümleri ve jquery kütüphanesini eklemelisiniz.

Son olarak formu post ettiğinizde tanımlanan modele yüklenmesini istiyorsanız. [HttpPost] özelliğine sahip actiona parametre olarak o modeli tanımlamalısınız. Formdaki hangi form elemanı modelin hangi özelliğine yüklenecekse onu asp-for ile form elemanlarında belirtmelisiniz.
Size gönderdiğim form örneğinde formun içinde sadece açılır liste var. Onun da name'i sehirId olduğu için action parametre olarak int sehirId almıştır. (Görsel2'ye bakınız)
 

Ekli dosyalar

  • layout-view.png
    layout-view.png
    162.4 KB · Görüntüleme: 8
  • form-action.jpg
    form-action.jpg
    183.9 KB · Görüntüleme: 9
Ekteki görselde view'de tanımlanan model Sehir olduğu için bu form Sehir modeline binding edilerek gönderilecek. Yani Sehir modelinden bir nesne oluşturularak o nesneye yüklenecek. Ama bu nesnenin sadece Id değeri olacak. Şehir adı ve seçmen sayısı boş kalacak. Çünkü formda sadece şehrin Id'si açılır liste üzerinden postalanıyor.

Action'a ise Sehir tipinde bir parametre geliyor. (Sehir sehir) Bu parametre, form postalandığında oluşturulan ve içinde sadece Id olan nesne oluyor. Bu nesnedeki Id'den yola çıkarak global tanımlanmış olan sehirler listesindeki gerçek şehir bulunup seçili şehir olarak tekrar view'e gönderiliyor. View'e gelen seçili şehir Model nesnesi olarak kullanılır ve seçmen sayısı ve diğer bilgiler Model üzerinden ekrana yazdırılır.

Burada aslında sadece şehrin Id'sine ihtiyacımız var. O yüzden ilk gönderdiğim örnekte action parametre olarak sehirId almıştı. Bu örnekte ise formu modele yükledik o şekilde action'da parametre olarak gönderdik ama içinde yine sadece Id var. Bu Id de bize şehirler listesindeki gerçek şehrin bilgilerine ulaşmamızı sağlıyor.
 

Ekli dosyalar

  • model-binding.png
    model-binding.png
    168.5 KB · Görüntüleme: 8
google graph ile partilerin oyunu gösteren grafik olusmadı bir türlü

controller dosyası

using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using YerelSecimler.Models;

namespace YerelSecimler.Controllers
{
public class YerelController : Controller
{
public bool sonuc;
public IActionResult Veriler()
{
sonuc = false;
ViewBag.sonuc = sonuc;
return View(model: sehirListe());
}

[HttpPost]
public IActionResult Veriler(int sehirId, int parti)
{
Random rnd = new Random();
List<string> sonuclar = new List<string>();
List<Partiler> partiSonuc = new List<Partiler>();

if (sehirId > 0 && parti > 0)
{
sonuc = true;
List<Sehirler> arama = sehirListe();

Sehirler seciliSehir = arama.Single(x => x.Id == sehirId);
string il = seciliSehir.ilAdi;
int secmenSay = seciliSehir.secmenSayisi;
int kullanilanOy = 0;
float oyOrani = 0.0f;

kullanilanOy = rnd.Next(secmenSay + 1);
oyOrani = (float)kullanilanOy / secmenSay * 100;

sonuclar.Add(il);
sonuclar.Add(secmenSay.ToString());
sonuclar.Add(kullanilanOy.ToString());
sonuclar.Add(oyOrani.ToString("F2"));

ViewBag.genel = sonuclar;


List<string> partiListe = new List<string>() { "A Patisi", "B Partisi", "C Partisi", "D Partisi", "E Partisi", "G Partisi", "H Partisi", "I Partisi", "J Partisi", "K Partisi" };


int sec;
int kalanOy = 0;
int partiOyu = 0;
float partiOrani = 0;
Partiler partiEkle;

for (var i = 0; i < parti; i++)
{
partiEkle = new Partiler();

sec = rnd.Next(partiListe.Count);

if ((kullanilanOy - kalanOy) > 0)
partiOyu = rnd.Next(kullanilanOy - kalanOy);
else
partiOyu = 0;
partiOrani = (float)partiOyu / kullanilanOy * 100;

partiEkle.partiAdi = partiListe[sec];
partiEkle.oySayisi = partiOyu;
partiEkle.oyOrani = partiOrani;

partiListe.Remove(partiListe[sec]);
partiSonuc.Add(partiEkle);

kalanOy += partiOyu;
}

kalanOy = kullanilanOy - kalanOy;

partiEkle = new Partiler();

partiEkle.partiAdi = "Geçersiz Oy";
partiEkle.oySayisi = kalanOy;
partiEkle.oyOrani = (float)kalanOy / kullanilanOy * 100;

partiSonuc.Add(partiEkle);

}
else
sonuc = false;

ViewBag.sonuc = sonuc;
ViewBag.partiSon = partiSonuc;
ViewBag.jsonSon= JsonConvert.SerializeObject(partiSonuc);
return View();
}

List<Sehirler> sehirListe()
{
var iller = new List<Sehirler>
{
new Sehirler{ Id=1, ilAdi="Ankara", secmenSayisi=250000},
new Sehirler{ Id=2, ilAdi="İzmir", secmenSayisi=200000},
new Sehirler{ Id=3, ilAdi="İstanbul", secmenSayisi=300000},
new Sehirler{ Id=4, ilAdi="Konya", secmenSayisi=180000},
new Sehirler{ Id=5, ilAdi="Trabzon", secmenSayisi=150000},
new Sehirler{ Id=6, ilAdi="Van", secmenSayisi=90000},
new Sehirler{ Id=7, ilAdi="Gaziantep", secmenSayisi=120000},
new Sehirler{ Id=8, ilAdi="Antalya", secmenSayisi=190000},
new Sehirler{ Id=9, ilAdi="Bursa", secmenSayisi=170000},
new Sehirler{ Id=10, ilAdi="Samsun", secmenSayisi=140000}
};

return iller;
}
}
}

view dosyası

@model List<YerelSecimler.Models.Sehirler>

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Yerel Seçim Sonuçları</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<link href="~/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<script src="~/lib/jquery/jquery.min.js"></script>
<script src="~/lib/bootstrap/js/bootstrap.min.js"></script>
<script src="~/js/kodlar.js"></script>
</head>
<body>
@{
if (ViewBag.sonuc == false)
{
<div class="col-sm-6 m-auto" id="giris">
<div class="p-3 bg-primary text-white text-center">
<h3>31 Mart 2024 Yerel Seçim Bilgileri</h3>
<p>Yerel seçime ait il ve seçmen sayısını belirleyin.</p>
</div>
<form asp-action="Veriler" asp-controller="Yerel"
method="post">
<div class="mt-3">
<label for="sehirId" class="form-label">İl Seçiniz:</label>
<select asp-for="sehirId" class="form-select form-control" name="sehirId" id="sehirId">
<option value="-1">-- Şehir Seçin --</option>
@foreach (var item in Model)
{
<option value="@item.Id" data-secmen-sayisi="@item.secmenSayisi">@item.ilAdi</option>
}
</select>
</div>
<div class="mb-3 mt-3">
<label for="secmen" class="form-label">Seçmen Sayısı:</label>
<input type="number" class="form-control" id="secmen" name="secmen" disabled>
</div>
<div class="mb-3 mt-3">
<label for="parti" class="form-label">Katılan Parti Sayısı:</label>
<input type="number" class="form-control" id="parti" placeholder="Katılan parti sayısını gir" name="parti">
</div>
<button type="submit" class="btn btn-success" id="olustur">Oluştur</button>
</form>
</div>
}
else
{
string son1 = "";
int son2 = 0;
float son3 = 0.0f;

<div class="col-sm-6 m-auto" id="liste">
<div class="p-3 bg-success text-white text-center">
<h3 id="baslik">@ViewBag.genel[0] İline Ait Seçim Sonuçları</h3>
</div>
<div id="genel">
<table class='table table-striped caption-top'>
<caption>
<h4 class='text-center'>Seçimlere Ait Genel Tablo</h4>
</caption>
<tbody>
<tr><td>Seçmen Sayısı : </td><td>@ViewBag.genel[1]</td></tr>
<tr><td>Kullanılan Oy : </td><td>@ViewBag.genel[2]</td></tr>
<tr><td>Katılım Oranı : </td><td> % @ViewBag.genel[3]</td></tr>
</tbody>
</table>
</div>
<div id="grafik" style="width: 100%; height:100%;">
</div>
<div id="ozel">
<table class='table table-hover caption-top'>
<caption>
<h4 class='text-center'>Oyların Partilere Göre Dağılımı</h4>
</caption>
<thead class='table-dark'>
<tr><th>Parti Adı</th><th>Oy Sayısı</th><th>Oy Oranı</th></tr>
</thead>
<tbody>

@for (var i = 0; i < ViewBag.partiSon.Count; i++)
{
var parti = ViewBag.partiSon;
if (ViewBag.partiSon.Count - i > 1)
{
<tr>
<td>@parti.partiAdi</td>
<td>@parti.oySayisi</td>
<td>% @parti.oyOrani.ToString("F2")</td>
</tr>
}
else
{
son1 = parti.partiAdi;
son2 = parti.oySayisi;
son3 = parti.oyOrani;
break;
}
}
</tbody>

<tfoot class='table-warning'>
<tr>
<td>@son1</td>
<td>@son2</td>
<td>% @son3.ToString("F2")</td>
</tr>
</tfoot>
</table>
</div>
</div>
}
}
</body>
</html>

ne yapabilirim olmuyor kodlarmı gereksiz
 
Viewbag ile gönderilen listeye javascript ile nasıl ulasabiliriz. Yapay zeka bulamadı olmadı yapan varmi
 
Gönderdiğim linkte herşey basit bir şekilde paylaşılmış. Yine de size çalıştırdığım örneği gönderiyorum.
 

Ekli dosyalar

  • mvcgraph.zip
    2 MB · Görüntüleme: 6
Arora Navara xlt48a


hocam tubitak yürütücüsü olan biri olarak yazım kuralı falan bence hikaye 22 projenin 16 tanesini ben yazdım zaten sisteme yüklerken wordden kopyalayıp ekrana yapıştırıyorsun 3 bölümü oluştur yeter başın ağrısın istemiyorsan yol yakınken dön

Hangisi

4004
4005
4006
4007
4008
2204

Vss.vss

Sende ev sahibi ol kardeşim evine kiracı girsin o zaman anlarsın ev sahiplerinin durumunu. İzmir'in göbeğinde 150 metrekare havuzlu sitede 2500 tl kirada duruyor beyefendi. Ne mahkeme işe yarıyor ne evden çıkıyor. Sence bu adalet mi?

O Anadolu Üniversitesi AÖF sınavı idi

google graph ile partilerin oyunu gösteren grafik olusmadı bir türlü

controller dosyası

using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using YerelSecimler.Models;

namespace YerelSecimler.Controllers
{
public class YerelController : Controller
{
public bool sonuc;
public IActionResult Veriler()
{
sonuc = false;
ViewBag.sonuc = sonuc;
return View(model: sehirListe());
}

[HttpPost]
public IActionResult Veriler(int sehirId, int parti)
{
Random rnd = new Random();
List<string> sonuclar = new List<string>();
List<Partiler> partiSonuc = new List<Partiler>();

if (sehirId > 0 && parti > 0)
{
sonuc = true;
List<Sehirler> arama = sehirListe();

Sehirler seciliSehir = arama.Single(x => x.Id == sehirId);
string il = seciliSehir.ilAdi;
int secmenSay = seciliSehir.secmenSayisi;
int kullanilanOy = 0;
float oyOrani = 0.0f;

kullanilanOy = rnd.Next(secmenSay + 1);
oyOrani = (float)kullanilanOy / secmenSay * 100;

sonuclar.Add(il);
sonuclar.Add(secmenSay.ToString());
sonuclar.Add(kullanilanOy.ToString());
sonuclar.Add(oyOrani.ToString("F2"));

ViewBag.genel = sonuclar;


List<string> partiListe = new List<string>() { "A Patisi", "B Partisi", "C Partisi", "D Partisi", "E Partisi", "G Partisi", "H Partisi", "I Partisi", "J Partisi", "K Partisi" };


int sec;
int kalanOy = 0;
int partiOyu = 0;
float partiOrani = 0;
Partiler partiEkle;

for (var i = 0; i < parti; i++)
{
partiEkle = new Partiler();

sec = rnd.Next(partiListe.Count);

if ((kullanilanOy - kalanOy) > 0)
partiOyu = rnd.Next(kullanilanOy - kalanOy);
else
partiOyu = 0;
partiOrani = (float)partiOyu / kullanilanOy * 100;

partiEkle.partiAdi = partiListe[sec];
partiEkle.oySayisi = partiOyu;
partiEkle.oyOrani = partiOrani;

partiListe.Remove(partiListe[sec]);
partiSonuc.Add(partiEkle);

kalanOy += partiOyu;
}

kalanOy = kullanilanOy - kalanOy;

partiEkle = new Partiler();

partiEkle.partiAdi = "Geçersiz Oy";
partiEkle.oySayisi = kalanOy;
partiEkle.oyOrani = (float)kalanOy / kullanilanOy * 100;

partiSonuc.Add(partiEkle);

}
else
sonuc = false;

ViewBag.sonuc = sonuc;
ViewBag.partiSon = partiSonuc;
ViewBag.jsonSon= JsonConvert.SerializeObject(partiSonuc);
return View();
}

List<Sehirler> sehirListe()
{
var iller = new List<Sehirler>
{
new Sehirler{ Id=1, ilAdi="Ankara", secmenSayisi=250000},
new Sehirler{ Id=2, ilAdi="İzmir", secmenSayisi=200000},
new Sehirler{ Id=3, ilAdi="İstanbul", secmenSayisi=300000},
new Sehirler{ Id=4, ilAdi="Konya", secmenSayisi=180000},
new Sehirler{ Id=5, ilAdi="Trabzon", secmenSayisi=150000},
new Sehirler{ Id=6, ilAdi="Van", secmenSayisi=90000},
new Sehirler{ Id=7, ilAdi="Gaziantep", secmenSayisi=120000},
new Sehirler{ Id=8, ilAdi="Antalya", secmenSayisi=190000},
new Sehirler{ Id=9, ilAdi="Bursa", secmenSayisi=170000},
new Sehirler{ Id=10, ilAdi="Samsun", secmenSayisi=140000}
};

return iller;
}
}
}

view dosyası

@model List<YerelSecimler.Models.Sehirler>

<!DOCTYPE html>

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Yerel Seçim Sonuçları</title>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<link href="~/lib/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
<script src="~/lib/jquery/jquery.min.js"></script>
<script src="~/lib/bootstrap/js/bootstrap.min.js"></script>
<script src="~/js/kodlar.js"></script>
</head>
<body>
@{
if (ViewBag.sonuc == false)
{
<div class="col-sm-6 m-auto" id="giris">
<div class="p-3 bg-primary text-white text-center">
<h3>31 Mart 2024 Yerel Seçim Bilgileri</h3>
<p>Yerel seçime ait il ve seçmen sayısını belirleyin.</p>
</div>
<form asp-action="Veriler" asp-controller="Yerel"
method="post">
<div class="mt-3">
<label for="sehirId" class="form-label">İl Seçiniz:</label>
<select asp-for="sehirId" class="form-select form-control" name="sehirId" id="sehirId">
<option value="-1">-- Şehir Seçin --</option>
@foreach (var item in Model)
{
<option value="@item.Id" data-secmen-sayisi="@item.secmenSayisi">@item.ilAdi</option>
}
</select>
</div>
<div class="mb-3 mt-3">
<label for="secmen" class="form-label">Seçmen Sayısı:</label>
<input type="number" class="form-control" id="secmen" name="secmen" disabled>
</div>
<div class="mb-3 mt-3">
<label for="parti" class="form-label">Katılan Parti Sayısı:</label>
<input type="number" class="form-control" id="parti" placeholder="Katılan parti sayısını gir" name="parti">
</div>
<button type="submit" class="btn btn-success" id="olustur">Oluştur</button>
</form>
</div>
}
else
{
string son1 = "";
int son2 = 0;
float son3 = 0.0f;

<div class="col-sm-6 m-auto" id="liste">
<div class="p-3 bg-success text-white text-center">
<h3 id="baslik">@ViewBag.genel[0] İline Ait Seçim Sonuçları</h3>
</div>
<div id="genel">
<table class='table table-striped caption-top'>
<caption>
<h4 class='text-center'>Seçimlere Ait Genel Tablo</h4>
</caption>
<tbody>
<tr><td>Seçmen Sayısı : </td><td>@ViewBag.genel[1]</td></tr>
<tr><td>Kullanılan Oy : </td><td>@ViewBag.genel[2]</td></tr>
<tr><td>Katılım Oranı : </td><td> % @ViewBag.genel[3]</td></tr>
</tbody>
</table>
</div>
<div id="grafik" style="width: 100%; height:100%;">
</div>
<div id="ozel">
<table class='table table-hover caption-top'>
<caption>
<h4 class='text-center'>Oyların Partilere Göre Dağılımı</h4>
</caption>
<thead class='table-dark'>
<tr><th>Parti Adı</th><th>Oy Sayısı</th><th>Oy Oranı</th></tr>
</thead>
<tbody>

@for (var i = 0; i < ViewBag.partiSon.Count; i++)
{
var parti = ViewBag.partiSon;
if (ViewBag.partiSon.Count - i > 1)
{
<tr>
<td>@parti.partiAdi</td>
<td>@parti.oySayisi</td>
<td>% @parti.oyOrani.ToString("F2")</td>
</tr>
}
else
{
son1 = parti.partiAdi;
son2 = parti.oySayisi;
son3 = parti.oyOrani;
break;
}
}
</tbody>

<tfoot class='table-warning'>
<tr>
<td>@son1</td>
<td>@son2</td>
<td>% @son3.ToString("F2")</td>
</tr>
</tfoot>
</table>
</div>
</div>
}
}
</body>
</html>

ne yapabilirim olmuyor kodlarmı gereksiz

Kodlar bunlar hocam
 
Geri
Üst