none
Onay Bey ve Diğer Seniorlar 1 Bakabilir mi ? RRS feed

  • Soru

  • Merhaba, 

    Kac gündür basit bir mantık hatasıyla karşılaşıyorum doğru düzgün yanıt veren olmadı 1 arkadaş kaynağını söyler gibi oldu ama MVC ye hakim olamadığından sonuç alamadık .Konu linki aşagıda yardımcı olur musunuz ?

    https://social.msdn.microsoft.com/Forums/tr-TR/6b72c7a2-0e99-4076-818d-4c2b45015719/mvc-querystring-le-gnderilen-deer-hk-?forum=aspnettr

    Cevap bulana kadar sanırım konu acmaya devam edeceğim :)

    17 Ekim 2016 Pazartesi 17:19

Yanıtlar

  • MVC otomatik olarak  querystring ve post data ile gelen bilgileri modele ve methodun paremetrelerine eşitler. 

    Senin gönderdiğin resim de query string yok ama default route tanımına bakacak olursan {controller}/{action}/{id}  şeklinde sıralandığını görürsün. Kendisi MVC versiyonuna göre farklı dosyalarda bulunuyor.

    Yerlerine koyacak olursan Home = Controller / GetProduct (çok yanlış bir isimlendirme) = Action / 1 = Id.

    Methodunun aldığı parametrenin türü "Product" o zaman bu arkadaşın Id diye propertysi varsa otomatik olarak eşleyecektir. Aynı şekilde uygun rota olursa diğer propertyler de eşlenir.

    Aynı şekilde Home/GetProduct/?Id=1 desende aynı işi yapacaktır. 



    17 Ekim 2016 Pazartesi 19:20
    Moderatör

Tüm Yanıtlar

  • Simdi sorun soyle buyuk ihtimalle action da parametre olarak id aldiginiz icin ve view de texboxin icin de ki id yi post etmeye kalktiginiz icin ve parametre isimleri ayni oldugu icin senin texboxda ki id ni actiona gonderiyor dogal olarak 
    17 Ekim 2016 Pazartesi 17:45
  • Rout daki Id ismiyle ayni oldugu icin texbox da ki Id olarak gorup route yaziyor 
    17 Ekim 2016 Pazartesi 17:48
  • Projenizi indirdim ve boyle bir sorun gorunmuyo ?
    17 Ekim 2016 Pazartesi 17:52
  • Simdi sorun soyle buyuk ihtimalle action da parametre olarak id aldiginiz icin ve view de texboxin icin de ki id yi post etmeye kalktiginiz icin ve parametre isimleri ayni oldugu icin senin texboxda ki id ni actiona gonderiyor dogal olarak 

    Action icinde ki parametreyi değiştirsende isim olarak aynısı oluyor ;

     public ActionResult GetProduct(int? Id, string name)
            {
                ViewBag.ID = Id;
                ViewBag.Name = name;
                ViewBag.Descriptions = dsc;
                return View();
            }

    Localhost://Home/GetProduct?Id=1&name=Deneme 

    Bu şekilde yazıncada 2side formdaki alanlara yanı birinci textBox'a 1, ikinci TextBox'a Deneme yaziyor

    Ayrica;

     public ActionResult GetProduct(int? Id, string name, string dsc)
            {
                ViewBag.ID = Id;
                ViewBag.Name = name;
                ViewBag.Descriptions = dsc;
                return View();
            }

    Üç parametre alinca bu sefer üçüncü parametre olan dsc ise formda görünmüyor;

    yani

    LocalHost:/Home/GetProduct?Id=1&name=deneme&dsc=ahmet olarak gönderince

    textBox lardan birinci ve ikincide "1" ve "deneme" üstdeki linke göre gösterilirken dsc=ahmet form da gösterilmiyor.

    Tam olarak anlat istediğinizi anlatir misiniz ?

    17 Ekim 2016 Pazartesi 18:16
  • Dediğim gibi ben MVC yapısını bilmiyorum. Ama benim gördüğüm bir hata yok

    Neden?

    1. Bu view'da siz model tanımı yapıyorsunuz ama ilk gösterimde model konusunda bir şey göndermiyorsunuz. Yani aldığınız querystring değerleri model değildir. o yüzden

    	public ActionResult GetProduct(int? Id,string name,string Descriptions)
            {
                Product p = new Product();
                p.Id = (int)Id;
                p.Name = name;
                p.Descriptions = Descriptions;
                return View();
            }

    biçiminde bir düzenleme lazım sanıyorum.

    Burada ne yapmak istiyorsunuz? txtFor dediğinize göre göstermek değil edit etmek istiyorsunuz. Peki neyi edit edeceksiniz? Querystring gönderip bunu göstermek istiyorsanız value ile atamanız gerekiyor zaten

    /1 gibi parametre gönderdiğinizde söylemiştim bir şekilde route Id olarak alıyor sanırım o yüzden yazıyor. 

    dediğim gibi ben MVC bilmiyorum, hatalı olabilir söylediklerim.


    http://pgnchess.com
    http://dergikapaklari.com

    17 Ekim 2016 Pazartesi 18:26
  • MVC otomatik olarak  querystring ve post data ile gelen bilgileri modele ve methodun paremetrelerine eşitler. 

    Senin gönderdiğin resim de query string yok ama default route tanımına bakacak olursan {controller}/{action}/{id}  şeklinde sıralandığını görürsün. Kendisi MVC versiyonuna göre farklı dosyalarda bulunuyor.

    Yerlerine koyacak olursan Home = Controller / GetProduct (çok yanlış bir isimlendirme) = Action / 1 = Id.

    Methodunun aldığı parametrenin türü "Product" o zaman bu arkadaşın Id diye propertysi varsa otomatik olarak eşleyecektir. Aynı şekilde uygun rota olursa diğer propertyler de eşlenir.

    Aynı şekilde Home/GetProduct/?Id=1 desende aynı işi yapacaktır. 



    17 Ekim 2016 Pazartesi 19:20
    Moderatör
  • Dediğim gibi ben MVC yapısını bilmiyorum. Ama benim gördüğüm bir hata yok

    Neden?

    1. Bu view'da siz model tanımı yapıyorsunuz ama ilk gösterimde model konusunda bir şey göndermiyorsunuz. Yani aldığınız querystring değerleri model değildir. o yüzden

    	public ActionResult GetProduct(int? Id,string name,string Descriptions)
            {
                Product p = new Product();
                p.Id = (int)Id;
                p.Name = name;
                p.Descriptions = Descriptions;
                return View();
            }

    biçiminde bir düzenleme lazım sanıyorum.

    Burada ne yapmak istiyorsunuz? txtFor dediğinize göre göstermek değil edit etmek istiyorsunuz. Peki neyi edit edeceksiniz? Querystring gönderip bunu göstermek istiyorsanız value ile atamanız gerekiyor zaten

    /1 gibi parametre gönderdiğinizde söylemiştim bir şekilde route Id olarak alıyor sanırım o yüzden yazıyor. 

    dediğim gibi ben MVC bilmiyorum, hatalı olabilir söylediklerim.


    http://pgnchess.com
    http://dergikapaklari.com

    [HttpPost]

    ActionResult GetProduct (int id, string name, string dsc){

     Yorum satırı  yap bu action'ı

    Burayı yorum satırı yapsanızda; query stringle gönderseniz ; yine forma deger basiyor....

    }

    [HttpGet]

    ActionResult GetProduct (int id, string name, string dsc){

     Yorum satırı  yap bu action'ı

    }


    anladıgım nokta şu aldıgı parametrelerle yani int id, string name model class'ımla yani Product.cs ile aynı isimdeyseler forma basiyor.


    17 Ekim 2016 Pazartesi 19:31
  • Evet forma basıyor, sorun ne? Yani ne soruyorsun? Sen neden Id ye bir TextBox koyduğunu bize anlat bence önce :) ?

    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    18 Ekim 2016 Salı 07:51
    Moderatör
  • Neden Id alanı için bir TextBox koyuyorsun?

    cevabını alana kadar konu açalım mı bizde?


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    18 Ekim 2016 Salı 10:40
    Moderatör
  • Neden Id alanı için bir TextBox koyuyorsun?

    cevabını alana kadar konu açalım mı bizde?


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    Aynen katılıyorum. İlk önce yapmak istediğin şeyi anlatsan güzel olur belkide izlediğin yol yanlıştır.

    eneskarakara[at]gmail[nokta]com

    18 Ekim 2016 Salı 10:47
  • MVC otomatik olarak  querystring ve post data ile gelen bilgileri modele ve methodun paremetrelerine eşitler. 

    Senin gönderdiğin resim de query string yok ama default route tanımına bakacak olursan {controller}/{action}/{id}  şeklinde sıralandığını görürsün. Kendisi MVC versiyonuna göre farklı dosyalarda bulunuyor.

    Yerlerine koyacak olursan Home = Controller / GetProduct (çok yanlış bir isimlendirme) = Action / 1 = Id.

    Methodunun aldığı parametrenin türü "Product" o zaman bu arkadaşın Id diye propertysi varsa otomatik olarak eşleyecektir. Aynı şekilde uygun rota olursa diğer propertyler de eşlenir.

    Aynı şekilde Home/GetProduct/?Id=1 desende aynı işi yapacaktır. 



    Cihan ;

    Class:

            

     public class Product
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Descriptions { get; set; }

        }

    Contoller:

       

    [HttpGet]

    public ActionResult GetProduct(int? Id, string name, string descriptions) { return View(); }

    Controller'ın icindeki icindeki değerler modelle aynı ; Buraya dikkat !!!

    View:

    @model QueryStringSampleDemo.Models.Product
    @{
        ViewBag.Title = "GetProduct";
    }
    
    <h2>GetProduct</h2>
    
    @using (Html.BeginForm("GetProduct","Home", FormMethod.Post ))
    {
        @Html.LabelFor(model => model.Id)<br />
        @Html.TextBoxFor(model => model.Id)<br />
        @Html.LabelFor(model => model.Name)<br />
        @Html.TextBoxFor(model => model.Name)<br />
        @Html.LabelFor(model => model.Descriptions)<br />
        @Html.TextBoxFor(model => model.Descriptions)<br />
        <input type="submit"   name="Gonder" value="- Gonder -" />
    }


    Şimdi ben GetProduct View'inde quey stringle istekde bulunursak ;

    LocalHost://Home/GetProduct?Id=1&name=deneme&descriptions=aciklama

    Burda View de forma nasıl bağlaniyor Cihan ? Query sqringle modele bind edilmiş

              

     public ActionResult GetProduct(int? Id, string name, string descriptions)
            {

                return View();  // Burda 
            }

    Burda yazan yerde ;

    Product product = new Product();

    product.Id=Id; product.Name = name; product.Descriptions = descriptions; 

    return View(product); koymamız lazım degil mi?

     



    18 Ekim 2016 Salı 15:36
  • Neden Id alanı için bir TextBox koyuyorsun?

    cevabını alana kadar konu açalım mı bizde?


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    Onay Bey Id alanı icin TextBox önemli degil ; değeri görmek  icin koydum.

    Şimdi 

    Model:

     public class Product
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Descriptions { get; set; }
            
        }

    Conroller :

       public ActionResult GetProduct(int? Id, string name, string descriptions)
            {
                
                return View();  
            }

    Controllerâ dikkat aldiği parametreler !! model property leri ile aynı

    Controller'ın icinde " return View()," yerine  

    Product product = new Product();

    product.Id=Id; product.Name = name; product.Descriptions = descriptions; 

    return View(product); koymamız lazım degil mi?

    View de formda gösterilmesi icin:


    18 Ekim 2016 Salı 15:44
  • @Html.LabelFor(model => model.Id)<br />

    Senin algın burada karışıyor.

    burada model yazan yerlere hamza yazsan da bir şey değişmez. Çünkü o model değil. Hatta sil product sınıfını. View içindeki en üstteki model tanımı da sil. Yine çalışır.



    18 Ekim 2016 Salı 15:59
    Moderatör
  • Neden Id alanı için bir TextBox koyuyorsun?

    cevabını alana kadar konu açalım mı bizde?


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    Uyku tutmuyor Wc de bile düşünür oldum :)

    Id alanının önemi yok Id yi cekiyor mu diye koydum. Önemli olan forma bu veri nasıl bağlaniyor :) diğer post'a yazdim.

    18 Ekim 2016 Salı 16:04
  • @Html.LabelFor(model => model.Id)<br />

    Senin algın burada karışıyor.

    burada model yazan yerlere hamza yazsan da bir şey değişmez. Çünkü o model değil. Hatta sil product sınıfını. View içindeki en üstteki model tanımı da sil. Yine çalışır.



    Kısaca demek istediğim şu Bir tane classım var, claasım da propery ler var bu propery lerle Controller icindeki

    Action method bu proprty lerle aynıyla; Query Stringle veri gönderdiğimde view de forma nasıl bağlaniyor

    ?

    Team vereyim mi ? anlatmak istediğimi anlatayım.....mail yazarsan ? 

    18 Ekim 2016 Salı 16:55
  • Ya sanırım bende bir sorun var,

    "değeri görmek  icin koydum" yazıyorsun sonra da "değerler niye görünüyor" diye mi soruyorsun?

    Bu değildir herhalde.

    Http adı üstünde metin alış-veriş protokolü. Bununda Get, Post gibi metodları var, ama sonuçta metin transferi. MVC dll'leri bu metinler içindeki veri kısımlarını alıp sana classının instance'ını oluşturup veriyor işte. Bu kadar basit bişey. Bukadar uzatılacak ne var?

    Instance'ı xmlden, jsondan, http requestten, hede den hodo dan alınan bilgilerler oluşturmak.... bu kadar.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    19 Ekim 2016 Çarşamba 07:18
    Moderatör
  • Ya sanırım bende bir sorun var,

    "değeri görmek  icin koydum" yazıyorsun sonra da "değerler niye görünüyor" diye mi soruyorsun?

    Bu değildir herhalde.

    Http adı üstünde metin alış-veriş protokolü. Bununda Get, Post gibi metodları var, ama sonuçta metin transferi. MVC dll'leri bu metinler içindeki veri kısımlarını alıp sana classının instance'ını oluşturup veriyor işte. Bu kadar basit bişey. Bukadar uzatılacak ne var?

    Instance'ı xmlden, jsondan, http requestten, hede den hodo dan alınan bilgilerler oluşturmak.... bu kadar.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com

    Onay Bey ;

    Public class Student

    {

      public int Id{get; set;}

              public string Name{get; set;}

      public sitring Surname{get; set;}

    }

    -------------------------------------------------------------------------------------

    Conroller:

    [HttGet]

    public ActionResult  Student( int ID, string NAME, string SURNAME) =>   View();

    --------------------------------------------------------------------------------------

    VİEW

    @model  Student

    @using(Html.BeginForm("Student", "Home", Formmethot.Get ))

    {

         @Html.TextBoxFor( m => m.Id)

         @Html.TextBoxFor( m => m.Name)

         @Html.TextBoxFor( m => m.Surname)

        <input type="submit" value = "Donder" />

       

       

    }

    Şimdi ;

    Localhost://Home/Student?ID=1&NAME=Amonra&SURNAME=Yalçıner

    Yapıştır Browser'a ;

    Form elemanlarında query string deki değerleri yaziyor.

    Ben bunu şöyle yorumladım ne derece doğru bilmiyorum ???***

    Conroller da ki 

    [HttGet]

    public ActionResult  Student( int ID, int NAME, SURNAME) 

    methodunun aldığı parametreler  ID, NAME, SURNAME  parametreleri classs'ım la yani modelimdeki proprty lerle aynı. Viewde modeli mi kullanıyormuyum - EVET  ama şu var View de modeli kullanırken;

    @Html.TextBoxFor( m => m.Name) // Browserı sağ tıkla öğeyi incele  Html Render halinde;

    <input type="text" name="Name" />  Burdaki name = "Name"(kalın yazdıgım Name) modelden geliyor 

    QueyString le Gönderdiğim deger;

    Localhost://Home/Student?ID=1&NAME=Amonra&SURNAME=Yalçıner

    ID, NAME, SURNAME method parametreleri büyük harfle başliyor yani View de basarken case sensitive büyük kücük harfe duyarlı degil query stringi forma basmakda 

    Doğru mu Yorumlamışım 

    Önay BEY.


    19 Ekim 2016 Çarşamba 18:02
  • Aslında burada yine yanlış anlama olmuş aşağıdaki uzun yazıların tamamını okudum ama olan şey modelle eşleştirmek değil. Yani garip bir durum ama şunu yaptığını biliyorum. Routing-Viewdata-Post/Get ile view tarafında bir editor kullanırken ne hikmetse modelle de bağlı olsa modeli okumak yerine bu değerleri okuyor. Debug da model normal görünse de önceliği bunlara veriyor. Bunun sebebini çok araştırdım, kimi yerler formatlama için bu değerleri okuyup format metni olarak kullandığını söylüyor, kimi yerler veriler için öncelikle bu saydığım üçlemede ki değerleri okuduğunu söylüyor. Bana her iki ihtimal de yüksek geliyor. Nasıl aşılır diyecek olursan örneğin Html.Textboxfor(m => m.Id, null, new {@class = "" }) şeklinde yapman gerek. Burada null değeri verdiğin taktirde formatlama/değer arama konusundan vaz geçiyor. Dediğim gibi tam olarak neden okuduğunu bilmiyorum. Lakin şu kod daha iyi anlatır.

    public ActionResult List()
    {
    ViewBag.Id = "1";
    ViewBag.Name = "Halit";
    Return View();
    }

    Bu kontroller fonksiyonuna binaen bir de view oluşturalım.

    @Html.TextboxFor(m => m.Id)
    @Html.TextboxFor(m => m.Name)

    Herhangi bir model belirtmene gerek kalmadan viewbag daki bu iki değeri okuduğunu göreceksin. Model olmadan da bu şekilde sistem çalışıyor. Bu bir avantajmı yoksa dez avantajmı kesin olarak anlamış değilim modeli ezip geçmesi de başlı başına bir mesele ancak bu şekilde çalıştığından dolayı çok can sıkıcı şey yaşadım. Bu hangi versiyonda geldi ne zamandan beri var bilemiyorum ama bir kaç projede bu sıkıntıyı yaşadıktan sonra modelle çakışmayacak elemanlar kullanıyorum.

    Önceki yolladığın gönderide aşağıdaki kodlara bakacak olursak 

    KODLAR:

    CONTROLLER

    public ActionResult GetProduct(int? Id)
            {
                ViewBag.ID = Id;
                return View();
            }
            [HttpPost]
            public ActionResult GetProduct(Product product)
            {
                ViewBag.Flag = 1;
                return View(product);
            }

    Class

    public class Product
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Descriptions { get; set; }
        }

    View

    <h2>GetProduct</h2>
    
    @using (Html.BeginForm("GetProduct","Home", FormMethod.Post ))
    {
        @Html.LabelFor(model => model.Id)<br />
        @Html.TextBoxFor(model => model.Id)<br />
        @Html.LabelFor(model => model.Name)<br />
        @Html.TextBoxFor(model => model.Name)<br />
        @Html.LabelFor(model => model.Descriptions)<br />
        @Html.TextBoxFor(model => model.Descriptions)<br />
        <input type="submit"   name="Gonder" value="- Gonder -" />
    }
    @ViewBag.ID  --
    @*
        @if (ViewBag.Flag == 1)
        {
            <div style="background-color:red">
                @Model.Id
                @Model.Name
                @Model.Descriptions
            </div>
        }
    *@

    Yukarı daki gibi kullanmaya devam ettiysen ViewBag.ID = Id (altını kalın yaptım) yapmışsın bunu kaldırırsan model kullanmadığın için Id yi senin viewe taşımaz. Yani sorunun çözülür. İlla da kullanacağım diyorsan yukarıda ki gibi null pass etmen gerek. Tam olarak anlatabildim mi bilemiyorum fazla vaktim olmadığı için bu kadar yazabildim.


    Fullstack Developer

    20 Ekim 2016 Perşembe 14:24
  • Aslında burada yine yanlış anlama olmuş aşağıdaki uzun yazıların tamamını okudum ama olan şey modelle eşleştirmek değil. Yani garip bir durum ama şunu yaptığını biliyorum. Routing-Viewdata-Post/Get ile view tarafında bir editor kullanırken ne hikmetse modelle de bağlı olsa modeli okumak yerine bu değerleri okuyor. Debug da model normal görünse de önceliği bunlara veriyor. Bunun sebebini çok araştırdım, kimi yerler formatlama için bu değerleri okuyup format metni olarak kullandığını söylüyor, kimi yerler veriler için öncelikle bu saydığım üçlemede ki değerleri okuduğunu söylüyor. Bana her iki ihtimal de yüksek geliyor. Nasıl aşılır diyecek olursan örneğin Html.Textboxfor(m => m.Id, null, new {@class = "" }) şeklinde yapman gerek. Burada null değeri verdiğin taktirde formatlama/değer arama konusundan vaz geçiyor. Dediğim gibi tam olarak neden okuduğunu bilmiyorum. Lakin şu kod daha iyi anlatır.

    public ActionResult List()
    {
    ViewBag.Id = "1";
    ViewBag.Name = "Halit";
    Return View();
    }

    Bu kontroller fonksiyonuna binaen bir de view oluşturalım.

    @Html.TextboxFor(m => m.Id)
    @Html.TextboxFor(m => m.Name)

    Herhangi bir model belirtmene gerek kalmadan viewbag daki bu iki değeri okuduğunu göreceksin. Model olmadan da bu şekilde sistem çalışıyor. Bu bir avantajmı yoksa dez avantajmı kesin olarak anlamış değilim modeli ezip geçmesi de başlı başına bir mesele ancak bu şekilde çalıştığından dolayı çok can sıkıcı şey yaşadım. Bu hangi versiyonda geldi ne zamandan beri var bilemiyorum ama bir kaç projede bu sıkıntıyı yaşadıktan sonra modelle çakışmayacak elemanlar kullanıyorum.

    Önceki yolladığın gönderide aşağıdaki kodlara bakacak olursak 

    KODLAR:

    CONTROLLER

    public ActionResult GetProduct(int? Id)
            {
                ViewBag.ID = Id;
                return View();
            }
            [HttpPost]
            public ActionResult GetProduct(Product product)
            {
                ViewBag.Flag = 1;
                return View(product);
            }

    Class

    public class Product
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Descriptions { get; set; }
        }

    View

    <h2>GetProduct</h2>
    
    @using (Html.BeginForm("GetProduct","Home", FormMethod.Post ))
    {
        @Html.LabelFor(model => model.Id)<br />
        @Html.TextBoxFor(model => model.Id)<br />
        @Html.LabelFor(model => model.Name)<br />
        @Html.TextBoxFor(model => model.Name)<br />
        @Html.LabelFor(model => model.Descriptions)<br />
        @Html.TextBoxFor(model => model.Descriptions)<br />
        <input type="submit"   name="Gonder" value="- Gonder -" />
    }
    @ViewBag.ID  --
    @*
        @if (ViewBag.Flag == 1)
        {
            <div style="background-color:red">
                @Model.Id
                @Model.Name
                @Model.Descriptions
            </div>
        }
    *@

    Yukarı daki gibi kullanmaya devam ettiysen ViewBag.ID = Id (altını kalın yaptım) yapmışsın bunu kaldırırsan model kullanmadığın için Id yi senin viewe taşımaz. Yani sorunun çözülür. İlla da kullanacağım diyorsan yukarıda ki gibi null pass etmen gerek. Tam olarak anlatabildim mi bilemiyorum fazla vaktim olmadığı için bu kadar yazabildim.


    Fullstack Developer

    Halil Bey,

    Yazdıgınız kodu denemedim olmadı. Tam olarak yazar mısınız model oluşturmadan olmuyor.

    Onay Bey e yazdiğim yaziyi okudunuz mu ? modelin ismi controllerda ki method 'un aldığı parametrelerle aynıysa 

    query string le gönderilen veri forma basiyor . Sizin karşılaştıgınız durumuda merak ettim kodu yazip bir yere upload eder misiniz ?

    ---------------------------------------------------------------------------------------

    Public class Student

    {

              public int Id{get; set;}

              public string Name{get; set;}

            public string Surname{get; set;}

    }

    -------------------------------------------------------------------------------------

    Conroller:

    [HttGet]

    public ActionResult  Student( int ID, string NAME, string SURNAME) 

    {

      return View ();

    }

    --------------------------------------------------------------------------------------

    VİEW

    @model  Student

    @using(Html.BeginForm("Student", "Home", Formmethot.Get ))

    {

         @Html.TextBoxFor( m => m.Id)

         @Html.TextBoxFor( m => m.Name)

         @Html.TextBoxFor( m => m.Surname)

        <input type="submit" value = "Donder" />

       

       

    }

    Şimdi ;

    Localhost://Home/Student?ID=1&NAME=Amonra&SURNAME=Yalçıner

    Yapıştır Browser'a ;

    Form elemanlarında query string deki değerleri yaziyor.

    Ben bunu şöyle yorumladım ne derece doğru bilmiyorum ???***

    Conroller da ki 

    [HttGet]

    public ActionResult  Student( int ID, int NAME, SURNAME) 

    methodunun aldığı parametreler  ID, NAME, SURNAME  parametreleri classs'ım la yani modelimdeki proprty lerle aynı. Viewde modeli mi kullanıyormuyum - EVET  ama şu var View de modeli kullanırken;

    @Html.TextBoxFor( m => m.Name) // Browserı sağ tıkla öğeyi incele  Html Render halinde;

    <input type="text" name="Name" />  Burdaki name = "Name"(kalın yazdıgım Name) modelden geliyor 

    QueyString le Gönderdiğim deger;

    Localhost://Home/Student?ID=1&NAME=Amonra&SURNAME=Yalçıner

    ID, NAME, SURNAME method parametreleri büyük harfle başliyor yani View de basarken case sensitive büyük kücük harfe duyarlı degil query stringi forma basmakda 

    Yani Controller daki method'un aldığı parametreler query string kullanacaksam model deki üyelerle aynı isimde olmayacak

    20 Ekim 2016 Perşembe 18:47
  • Ben o projede ki kodları tekrar inceledim buradan pek koymam mümkün değil müşteriye ait proje. Ancak bizde sizinle aynı şeyi yaşamışız. Bizde model binding aşamasında custom model binder kullanarak get durumunda verileri aktarmamışız bu şekilde çözmüşüz olayı. Yalnız bizimki istisnai bir durumdu siz bir çok modeli bu şekilde kullanacaksanız her model için binder oluşturmakla uğraşmak zorunda kalırsınız ki bu pekte mantıklı değil. Model controller aşamasında iken debugta normal görünürken view e geçerken ViewContext  bu işlemi yapıyor yani parametreye bakıyor, viewbaga bakıyor route bakıyor ve ardından modeli işliyor.

    Yalnız viewbag dan okuma konusunu karıştırmışım o textboxfor da çalışmıyor ekstra değer alan nesnelerde çalışan mesela dropdown gibi onlarda işe yarıyor. Tabi onda da sıkıntı yaşadığımız için o aklımda kalmış bu arada.

    Açıkcası şunu yazdığımızda karşımıza sonuç çıkıyorsa @ViewContext.Controller.ValueProvider.GetValue("ParametreAdı").AttemptedValue model değişiyor demektir. Bunu da custom binder de iflerle engellemek mümkün. Standart binder propertyleri alıp bir döngüyle böyle otomatik eşleştiriyor. Yani bunun önüne standartta geçmen mümkün olmayacak.


    Fullstack Developer

    21 Ekim 2016 Cuma 07:04