ASP.NET MVC’de CommandArgument Düğmeleri ile Özelleştirilebilir Bir Tablo Oluşturma
Geliştiriciler olarak, bir çatıdan diğerine geçerken sık sık zorluklarla karşılaşıyoruz. ASP.NET WebForms deneyiminiz varsa, etkileşimli tablo öğeleri oluşturmaya çalışırken ASP.NET MVC’de takılı kaldığınızı hissedebilirsiniz, özellikle de düğmelerle.
Bu blog yazısında, genel bir soruyu ele alacağız: ASP.NET MVC’de CommandArgument
özelliğine sahip düğmelerle kendi tablonuzu nasıl oluşturabilirsiniz? Sorunu netleştirmekle kalmayacak, aynı zamanda MVC ilkelerine uygun sağlam bir çözüm de sunacağız.
Problemi Anlamak
Sorun, bir ASP.NET MVC uygulaması içinde WebForms düğmesi kullanmaya çalıştığınızda ortaya çıkar. Oluşturmayı denediğiniz tablo yapısının basitleştirilmiş bir versiyonu şöyle olabilir:
<div>
<table>
<thead>
<tr>
<td>Port adı</td>
<td>Mevcut port versiyonu</td>
<td>Yeni port versiyonu</td>
<td>Güncelle</td>
</tr>
</thead>
<% foreach (var ip in Ports) { %>
<tr>
<td><%= ip.PortName %></td>
<td><%= ip.CurrentVersion %></td>
<td><%= ip.NewVersion %></td>
<td>
<asp:Button ID="btnUpdate" runat="server" Text="Güncelle"
CommandArgument="<% ip.PortName %>" />
</td>
</tr>
<% } %>
</table>
</div>
Bu kod parçasında, CommandArgument
özelliğinde ip
değişkeninin çözülememesiyle ilgili hatalar alabilirsiniz. Bu, ASP.NET MVC’nin görünümleri işleme şekli ile WebForms arasındaki temel farklılıklardan kaynaklanmaktadır.
Çözüm: ASP.NET MVC’de Düğmeleri Doğru Şekilde Uygulamak
İstenen işlevselliği elde etmek için MVC kurallarına uygun şekilde iki etkili yaklaşım sunuyorum:
Seçenek 1: Input Etiketleri Kullanma
- WebForms düğmesini bir HTML input veya button elemanıyla değiştirin.
- Düğmeyi, güncellemeyi yönetecek bir kontrolcü eylemine işaret eden bir form elementi içinde sarın.
Tablonuzu input düğmesi ile nasıl yapılandırabileceğinizi gösteren bir örnek:
<div>
<table>
<thead>
<tr>
<td>Port adı</td>
<td>Mevcut port versiyonu</td>
<td>Yeni port versiyonu</td>
<td>Güncelle</td>
</tr>
</thead>
@foreach (var ip in Ports)
{
<tr>
<td>@ip.PortName</td>
<td>@ip.CurrentVersion</td>
<td>@ip.NewVersion</td>
<td>
<form action="/ControllerName/ActionName" method="post">
<input type="hidden" name="portName" value="@ip.PortName" />
<input type="submit" value="Güncelle" />
</form>
</td>
</tr>
}
</table>
</div>
Seçenek 2: Sorgu Dizeleri ile Hiperlinkler Kullanma
Bir diğer alternatif, eyleme yönlendirmek için hiperlanklere geçmektir. Gerekli parametreleri sorgu dizesi ile geçebilirsiniz.
<div>
<table>
<thead>
<tr>
<td>Port adı</td>
<td>Mevcut port versiyonu</td>
<td>Yeni port versiyonu</td>
<td>Güncelle</td>
</tr>
</thead>
@foreach (var ip in Ports)
{
<tr>
<td>@ip.PortName</td>
<td>@ip.CurrentVersion</td>
<td>@ip.NewVersion</td>
<td>
<a href="/ControllerName/ActionName?portName=@ip.PortName">Güncelle</a>
</td>
</tr>
}
</table>
</div>
Özeti
ASP.NET WebForms’tan MVC’ye geçiş yapmak zorlu olabilirken, çatı tasarımındaki farklılıkları anlamak daha kapsayıcı ve standartlaştırılmış çözümler uygulamanıza yardımcı olacaktır.
Anahtar Noktalar:
- MVC’de WebForms bileşenlerini kullanmaktan kaçının.
- asp:Button yerine HTML elementlerini (input veya hiperlank) kullanın.
- Eylemlerin kontrolcülerine geri yönlendirilmesini sağlayın, böylece dinamik veri işleme yapabilirsiniz.
Bu yaklaşımları takip ederek, ASP.NET MVC uygulamalarınızda iyi yapılandırılmış, etkileşimli tablolar oluşturabilir, eski kod yapılarının getirdiği sıkıntılardan kaçınabilirsiniz.
Bu konuyla ilgili daha fazla sorunuz veya görüşleriniz varsa, lütfen düşüncelerinizi yorumlar kısmında paylaşmaktan çekinmeyin!