MVC 2.0'da LINQ kullanmak isterken hata aliniyorsa, ne yapmak gerekiyor?

by oozturk 30. June 2010 23:25

web.config dosyasinda bulunan <system.web> icerisindeki <compilation> icerisindeki <assemblies> kısmına aşağıdaki kod eklenmelidir.

<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

Tags: ,

MVC

ASP.NET MVC 2.0 Beta hakkında.

by oozturk 3. September 2009 11:12

Selamlar,

ASP.NET MVC 1.0 kullananlar bilir, getirdiği o kadar güzel şeyler var ki vazgeçmesi çok güç ancak büyük uygulamalar için çok daha fazla geliştirilmesi gerekiyor, çok eksiği var. MVC 2.0 Beta'nın sürüm notlarında gördüğüm kadarıyla geliştiricileri biz diğer meslektaşlarını dinlemişler ve bu özellikleri hakkıyla MVC'ye ekliyorlar. Beta olmasına rağmen harika yeni özelliklerinden ötürü hemen mevcut MVC 1. projelerini aktarmak istiyorum. Tabii konu iş olunca şakaya gelmiyor, karşımıza çıkabilecek her türlü problemi öceden görmek gerekiyor. Burada da sürüm notlarına güvenmekten başka çare yok (böyle dememden güvenmediğim anlaşılmasın, demek istediğim başka öngörülmemiş problemler çıkacaksa bunları yol alırken göreceğiz), daha önceden alışık olduğumuz gibi yine bayağı kapsamlı olarak nasıl MVC 1.0 uygulamalarının MVC 2.0 Beta sürümüe yükseltilmesi gerektiği sürüm notlarına eklenmiş.

Sürüm notlarında iki farklı izlenebilece yoldan bahsediliyor; biri bütün projenin MVC 2.0 Beta ile oluşturulmuş bir başka projeye tek tek kopyalanarak taşınması, diğeri ise mevcut proje'nin üzerinde referans ayarlarının değiştirilmesi gibi işlemlerle geçişin sağlanması. Bana birincisi - daha uzun süreceğini ve canımı sıkacağını bildiğim halde - daha garanti bir yol gibi geldi ve bir projemi öyle yükselttim. Hiçbir problem olmadan çalıştı ve yeni gelen o beklediğimiz özellikler de harika. Tabii şu anda ne olursa olsun beta, bunun anlamı daha sornaki beta sürümlerinde ya da tam sürümünde başka özellikler eklenebileceği gibi bu beta sürümünde barındırılan bazı özellikler çıkartılabilir ya da değiştirilebilir. Yani gerçek hayat projelerinde kullanmak için çok erken. Ancak sürece bu aşamada bir fiil eşlik etmek lazım ki konuya tam hakim olabilielim ve diğer gelecek sürüm için fikir üretip bunları geliştiricilerine iletebilelim. Bunu çorbada bizimde tuzumuz olsundan ziyade mevcut sürümde gördüğümüz eksikleri paylaşalım ki gelecek sürüm için yol gösterici olsun diye söylüyorum.

Tags: , , ,

MVC

MVC'de image link nasıl yapılır?

by oozturk 3. June 2009 19:45

MVC'de alıştıktan sonra insan vazgeçemiyor sürekli link için action, controller, id gibi özellikler ile link yaratmaya başlıyor. Eh bu durumdan sonra resimlere de link vermek isteyince kendi html helper fonksiyonumuzu yazmak zorunda kalıyoruz. Aşağıdaki örneği aynen kullanabilirsiniz.

        public static string ImageLink(this HtmlHelper helper,
                              string action,
                              string controller,
                              object routeValues,
                              string imageURL,
                              string alternateText,
                              object linkHtmlAttributes,
                                string style,
                              object imageHtmlAttributes)
        {
        // Create an instance of UrlHelper
           UrlHelper url = new UrlHelper(helper.ViewContext.RequestContext);
        //Create image tag builder
            TagBuilder imageBuilder = new TagBuilder("img");

            if( !string.IsNullOrEmpty( style ) )
                imageBuilder.MergeAttribute( "style", style );

        // Add image attributes
            imageBuilder.MergeAttribute("src", imageURL);
            imageBuilder.MergeAttribute("alt", alternateText);
            imageBuilder.MergeAttributes(new RouteValueDictionary(imageHtmlAttributes));
        //' Create link tag builder
            TagBuilder linkBuilder = new TagBuilder("a");
        //' Add attributes
            linkBuilder.MergeAttribute("href", url.Action(action, controller, new RouteValueDictionary(routeValues)));
            linkBuilder.InnerHtml = imageBuilder.ToString(TagRenderMode.SelfClosing);
            linkBuilder.MergeAttributes(new RouteValueDictionary(linkHtmlAttributes));
        //' Render tag
            return linkBuilder.ToString( TagRenderMode.Normal );
        }

Bu fonksiyonun kullanımına dair bir örnek vereyim: 

<%= Html.ImageLink("Detail", "Firma", new { id = firma.Firmaadi }, "/content/images/a.jpg", firma.Firmadi, null, "margin-left:10px; border:1px solid #CCC", null) %> 

 

Kolay gelsin!

Tags: ,

MVC

MVC'de belirli bir action için kullanıcı kısıtlaması nasıl yapılıyor?

by oozturk 29. April 2009 14:45

Oluştuduğumuz MVC web projelerinde actionlara herkesin erişmesini engellemek isteyebiliriz. Mesela firma kaydı yaratılacaksa yalnızca belirli bir role mensubu kullanıcılarının bunu yapabilmelerini isteyebiliriz. Bu durumlarda o action'ın başına aşağıdaki gibi bir kod yazılmalıdır.

[Authorize( Roles = "Admins" )]
        public ActionResult Create()
        {
           //...

            return View();
        }

Eğer birden çok role mensubu kullanıcıların erişebilmesini istiyorsak Authorize satırını o role için de tekrar etmeliyiz.

[Authorize( Roles = "Admins" )]
[Authorize( Roles = "Users" )]
        public ActionResult Create()
        {
          //...

            return View();
        }

Bu kadar basit. Aynı kısıtlamayı controller class için de kullanabiliriz.

İyi günler!

Tags:

MVC

Bir Linq sorgusu sonucundan SelectListItem array'i nasıl elde edilir?

by oozturk 29. April 2009 14:34

Merhaba,

Mesela 10 kolonlu bir sorgu sonucu var ve SelectListItem oluşturmak isteniliyor ki DropDownList gibi listelerde kullanabilsin, nasıl yapmalı?

( from bs in DenemeRepository.GetDeneme()
                                             select new SelectListItem
                                             {
                                                 Value = bs.DenemeID.ToString(),
                                                 Text = bs.DenemeName,
                                                 Selected = false
                                             } );

Yukarıdaki kodu duruma göre modifiye ederek elde edilebilir.

İyi günler!

Tags:

MVC

MVC'de ViewEngine neden yazılır, nasıl yazılır?

by oozturk 29. April 2009 14:28

Merhaba,

MVC'de ViewEngine neden yazılır? Çünkü standart şablon haricindeki klasörlere ya da o klasörlerde usercontrol barındırıyorsanız farklı şablonlar ile çalışmak istiyorsunuzdur. Bu yüzden ViewEngine yazılır ve kayıt edilir. Misal olarak deneme klasöründeki ViewUserControl'e erişebilmek için yazarsanız. Peki nasıl yapılır?

using System.Web.Mvc;

public class OtherViewEngine : WebFormViewEngine
{
    public OtherViewEngine()
        : base()
    {
        ViewLocationFormats = new[] {
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/deneme/{0}.aspx",
            "~/Views/deneme/{0}.ascx",
        };

        MasterLocationFormats = new[] {
            "~/{0}.master",
            "~/Shared/{0}.master",
            "~/Views/{1}/{0}.master",
            "~/Views/Shared/{0}.master",
        };

        PartialViewLocationFormats = ViewLocationFormats;
    }
}

 

Yukarıdaki gibi bir kodu boş bir kod dosyası içine yazın ve kaydedin. Daha sonra da Global.asax dosyasındaki RegisterRoutes fonksiyonunun içine en alta aşağıdaki satırı ekleyin.

ViewEngines.Engines.Add( new OtherViewEngine() );

 

Bu kadar basit. Bunun gibi birçok klasörü ekleyebilirsiniz ya da daha farklı şablonlar yazıp kullanabilirsiniz.

İyi günler!

Tags: ,

MVC

MVC'de Ajax ile ViewUserControl'ü render edip dinamik olarak sayfa içine yerleştirmek nasıl yapılır?

by oozturk 29. April 2009 13:48

Merhaba,

Web Forms kullanırken ajax ile UserControl sürekli kullanıyorduk peki ya MVC'de nasıl yapılıyor? MVC ile geliştirilen projelerde ViewUserControl ve ViewPage dosyalarına karşılık gelen nesneler olmadığı ya da tipleri olmadığı için new komutuyla çağırmak mümkün değil. Ayrıca ViewData ve ViewData.Model kullanılmak istenilebilir. Bu sebeplerle farklı bir yol izlemek gerekiyor.

1. Öncelikle bu iş için MVCContrib kütüpanesi gerekiyor. Bu kütüphanede MVC  için birçok yeni kolaylık var. İndirmek için www.codeplex.com/MVCContrib adresini ziyaret edin. İndirdikten sonra projenize referans olarak MvcContrib.dll dosyasını ekleyin.

2. Aşağıda sunduğum kodu projenizin içinde istediğiniz bir yere koyun

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.Mvc;
using System.Web.Mvc.Html;
using System.Security.Principal;
using MvcContrib.UI;

public static string RenderPartialToString( string userControl, ViewDataDictionary viewData, TempDataDictionary tempdata, ControllerContext controllerContext )
        {
            HtmlHelper h = new HtmlHelper( new ViewContext( controllerContext, new WebFormView( "message" ), viewData, tempdata ), new ViewPage() );
            var blockRenderer = new BlockRenderer( controllerContext.HttpContext );

            string s = blockRenderer.Capture(
                () => RenderPartialExtensions.RenderPartial( h, userControl, viewData )
            );

            return s;
        }

 

3. Bir Controller içine aşağıdaki gibi bir action'ı yazın

        public ContentResult GetEditView()
        {

            //Vıewdata içine ya da model'e birşey eklemek ya da değiştirmek istiyorsanız bunu burada yapın daha sonra aşağıdaki adımlara devam edin.
            string s= MvcStuff.RenderPartialToString( "/Views/deneme/EditView.ascx", ViewData, TempData, this.ControllerContext );
            return new ContentResult()
            {
                Content = s
            };
        }

4. Bu action'ı istediğiniz sayfa ya da ViewUserControl içinden Ajax.ActionLink ile ekleyin.

<%=        Ajax.ActionLink( "buraya basın", "GetEditView", new
          {
              Controller = "deneme"
          }, new AjaxOptions
          {
              UpdateTargetId = "mesedit"
          } )
 %><div id="mesedit">

</div>

5. Masterpage kullanıyorsanız oraya kullanmıyorsanız sayfa içine gerekli javascript kütüphanelerini ekleyin

    <script src="../../Scripts/jquery-1.3.2.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>

Bu kadar basit. Şu anda eğer aynı mantık ile yazdıysanız mesedit diye adlandırdığım div içinde usercontrol'ünüz gösterilecektir ve orada çalışacaktır. Elbette %100 Ajax. :-)

Bu arada eğer usercontrol bulunamadı diye bir hata alıyorsanız bir viewengine yazmadınız demektir. Bunun için de viewengine örneği için yazdığım yazıyı okumanızı tavsiye ederim.

Bu kütüphaneler ve jQuery sayesinde isterseniz fade gibi animasyonlar ekleyebilir, görünümü daha da güçlendirebilirsiniz.

İyi günler!

Tags: , , , ,

Ajax | MVC

Html Helper nasıl yazılır?

by oozturk 18. April 2009 16:11

Çok kolay yazılır. Bazı belirtilmesi gereken mecburi şeyler var onlara dikkat etmek gerekiyor o kadar. Nedir onlar?

- Bir class yaratmalısınız ve bu class static olmalı. Ayrıca eğer yazacağınız methodun Html class'ında görünmesini istiyorsanız class adınız Html olmalı ve partial olmalıdır. Yani:

     public static partial class Html

- Bu class içine yaratacağınız method'da aynı şekilde static olmalı, geriye string döndürmeli ve ilk değişkeni this htmlhelper helper olmalı (değişken adı size kalmış tabii). Bu arada HtmlHelper class'ı System.Web.Mvc namespace'i içinde bulunuyor. Yani:

     public static string Anchor(this HtmlHelper helper, string text, string link)

- Bu kadar.

 

Bir de örnek vereyim:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace DenemeMVC
{
    public static partial class Html
    {
        public static string Anchor(this HtmlHelper helper, string text, string link)
        {
            var builder = new TagBuilder( "a" );
            builder.MergeAttribute( "href", link );

            return builder.ToString( TagRenderMode.StartTag ) + text + builder.ToString( TagRenderMode.EndTag );
        }
    }
}

 

Mesela yukarıdaki kodu kullanarak Html.Anchor("Microsoft", http://www.microsoft.com) diye kullanabilirsiniz ve ortaya bir anchor çıkacaktır.

Bu olay tamamen Anonymous methods'dur, başka da birşey değildir esasen.

 

Kolay gelsin.

Tags: ,

ASP.NET | MVC

MVC Preview 5'de Html.RadioButtonList vardı ancak güncel versiyonlarında yok, ne yapmalı?

by oozturk 17. April 2009 05:37

Evet yok. Ama bu bir kayıp değil. Çünkü radiobuttonlist'in amacı radiobuttonları gruplamak ve bunu Html.RadioButtonList olmadan da Html.RadioButton ile yapabiliriz.

Tek yapmamız gereken şey; gruplamak istediğimiz radiobuttonların isimlerini birbiri ile aynı vermek, bu kadar basit. Misal 10 tane ekleyecekseniz bir for döngüsü içinde yaratın radiobuttonları ve isimlerini aynı verin, değerleri ihtiyacınız olduğu gibi verin ve çalışacaktır.

Tags: , ,

ASP.NET | MVC

Asp.Net MVC 1.0 Çıktı!

by oozturk 31. March 2009 15:13

Microsoft Asp.Net için MVC 1.0 çıktı!

Kurulum için önceki mvc versiyonlarını kaldırmanın yanında .net 3.5 için sp1'e de ihtiyacınız var. Kurulum için sp1 gerekmese de, kullanmak ve sorun yaşamamak için mutlaka sahip olmak gerekiyor. RC2 ile arasında hiçbir fark yok esasen ancak rc2 ile geliştirilmiş uygulamalarda bazı değişiklikler yapılması gerekiyor. Bütün yapmanız gerekenler için http://download.microsoft.com/download/A/6/8/A68968AE-DE1D-4FA4-A98A-B74042C6090D/ASP.NET%20MVC%20-%201.0%20Release%20Notes.doc dosyasını okumanızı tavsiye ederim.

 

İndirmek için microsoft.com sitesine göz atın, ya da buradan indirin (microsoft.com'dan direk link).

Tags: ,

.NET | ASP.NET | MVC

Hakkımda...

Aklıma gelen sorunlara çözümler yazmaya çalışıyorum burada. Eğer çözümünü yazmamı istediğiniz sorunlar varsa,  bana e-posta atın :-)

 Iyi kodlamalar..

RecentComments

Comment RSS

Tag cloud