2009-05-21 6 views
7

ile routeValues ​​kaybeder fark ettim ne yöntem FORMU etiketinin eylem niteliğine routeValues ​​ verilen kodlar() Html.BeginForm. Bu POST yöntemi ile iyi çalışır. Ancak yöntem GET ise, eylem URL'sindeki tüm parametreler tarayıcı tarafından sıyrılır (IE8 ve Firefox 3.0.7'de test edilmiştir). ÖrneğinHtml.BeginForm FormMethod.GET

, görünümde bu kod

<% 
    using (Html.BeginForm("TestAction", "TestController", new { test = 123 }, 
     FormMethod.Get)) 
    { 
     Response.Write("<input type='submit'>"); 
    }; 
%> 

HTML

<form action="/TestController/TestAction?test=123" method="get"> 
    <input type='submit'> 
</form> 

verir Fakat formu URL'yi gönderdikten sonra oldu /TestController/TestAction değil /TestController/TestAction? test = 123 (parametre kayıp).

Şimdi başka çözüm vardır yerine routeValues ​​ parametre ait çağırır ama ilgileniyorumHtml.Hidden() grubunu kullanmak? MVC'de bir hata olarak düşünülmeli mi?

+0

Sorununuzu açıklayabilir misiniz? Bir POST yerine GET kullanarak bir form göndermeye mi çalışıyorsunuz? Bir örnek verebilir misin? –

cevap

7

Gördüğünüz gibi, oluşturulan HTML "doğru" ve istediğiniz semantiğe sahip olduğundan, bu sunucu tarafı sorunu değil, istemci tarafıdır. Bu durumda tarayıcı, sorguyu sorgunun sonuna eklemesini beklerken, eylemin URL'sini işlem URL'sinden kaldırıyor. Spesifikasyonu okursanız, eylemin bir sorgu içermemesi (bu bir URL değil, bir URI) olması, aslında HTTP spesifikasyonunun bir "sınırlaması" nı vurmanızdır.

Sorgu içermeyen çıplak URL'ye yönlendirildiniz, çünkü HTML'de göndermeniz gereken bir şey yok. Gönderme alanına bir ad ve değer vermeyi deneyin veya gizli bir alan ekleyin, parametrelerin sorguda iletildiğini göreceksiniz.

Bu durumda gizli alanları kesinlikle kullanmalısınız.

+0

GET yöntemi seçildiğinde ASP.NET MVC HTML yardımcısı BeginForm() neden gizli alanları oluşturmuyor? –

+0

Alternatif olarak, belirli bir rota tanımlaması oluşturun, böylece "test" değeri bir sorgu dizgisi yerine bir yol parçası olarak eklenir, bu durumda gizli girdiye ihtiyacınız yoktur. –