En iyi yanıtlayıcılar
Onay Bey ve Diğer Seniorlar 1 Bakabilir mi ?

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 :)
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.
- Düzenleyen Cihan YakarMVP, Moderator 17 Ekim 2016 Pazartesi 19:21
- Yanıt Olarak Öneren Önay YALÇINERModerator 18 Ekim 2016 Salı 07:49
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 19 Ekim 2016 Çarşamba 13:04
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
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 ?
-
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 -
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.
- Düzenleyen Cihan YakarMVP, Moderator 17 Ekim 2016 Pazartesi 19:21
- Yanıt Olarak Öneren Önay YALÇINERModerator 18 Ekim 2016 Salı 07:49
- Yanıt Olarak İşaretleyen Kyamuran SalibryamMicrosoft contingent staff, Moderator 19 Ekim 2016 Çarşamba 13:04
-
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.
- Düzenleyen yuKKo Ganioglu 17 Ekim 2016 Pazartesi 19:32
-
-
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
- Düzenleyen Önay YALÇINERModerator 18 Ekim 2016 Salı 10:40
-
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
eneskarakara[at]gmail[nokta]com
-
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?
- Düzenleyen yuKKo Ganioglu 18 Ekim 2016 Salı 16:14
-
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:
- Düzenleyen yuKKo Ganioglu 18 Ekim 2016 Salı 16:12
-
@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.
- Düzenleyen Cihan YakarMVP, Moderator 18 Ekim 2016 Salı 15:59
-
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.
-
@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 ?
-
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
-
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.
- Düzenleyen yuKKo Ganioglu 19 Ekim 2016 Çarşamba 18:07
-
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
-
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
-
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