ASP.NET MVC’de RedirectToAction
Kullanarak İstek Verilerini Kaybetmeden Nasıl Yönlendirme Yapılır
ASP.NET MVC ile çalışırken, özellikle form gönderimlerinde, RedirectToAction
kullanarak yönlendirme gerektiren bir durumla karşılaşabilirsiniz. Bu durum genellikle, bir kullanıcı validation hatası ile bir form gönderdiğinde ve onu orijinal forma geri yönlendirmek istediğinizde ortaya çıkar. Ancak, URL’nin gönderim yapılan eylem sayfası yerine formun URL’sini yansıtmasını da istersiniz. Buradaki zorluk, yönlendirme işlemi sırasında kullanıcının rahatlığı ve doğrulama kontrolleri için orijinal POST verilerini korumaktır.
Problemin Açıklaması
ASP.NET MVC’de bir form gönderildiğinde, gönderilen veri genellikle POST
isteğinin bir parçasıdır. Eğer bir doğrulama hatası meydana gelirse ve bir yönlendirme yöntemi (örneğin RedirectToAction
) kullanırsanız, HTTP yöntemi POST
‘tan GET
‘e değişir. Bu da tüm ilgili form verilerinin etkili bir şekilde kaybolduğu anlamına gelir. ViewData
gibi parametreleri kullanmaya çalışırsanız, form verileri GET
parametrelerine dönüştürüleceği için orijinal POST
verilerini taşımaz.
Çözüm: TempData Kullanımı
Yönlendirme işlemi sırasında istek verilerini kaybetmeden saklamanın en iyi yolu TempData
kullanmaktır. TempData
, verileri geçici olarak saklamanıza olanak tanır ve bu veriler yalnızca mevcut istek süresi ve bir sonraki istek süresince kalıcıdır. Bu durum sizin kullanım durumunuz için mükemmeldir.
Bu çözümü nasıl adım adım uygulayabileceğinizi inceleyelim.
Adım 1: İstek Verilerini TempData’da Saklama
Form gönderimini işleyen eylem metodunuzda, yönlendirmeden önce Request.Form
verilerini TempData
‘ya kaydedebilirsiniz. İşte kodda nasıl göründüğü:
public ActionResult Send()
{
TempData["form"] = Request.Form;
return this.RedirectToAction(a => a.Form());
}
Adım 2: Yönlendirilen Eylemde Veriyi Alma
Yönlendirdiğiniz eylem metodunda (bu durumda, Form
metodu), TempData
‘da herhangi bir veri olup olmadığını kontrol edeceksiniz. Eğer varsa, uygun koleksiyon türüne geri dökerek kullanabilirsiniz:
public ActionResult Form()
{
// viewData'yi vb. tanımlayın.
if (TempData["form"] != null)
{
// TempData["form"]'u System.Collections.Specialized.NameValueCollection olarak dökün
var formData = (System.Collections.Specialized.NameValueCollection)TempData["form"];
// formData'yı gerektiği gibi kullanın
}
return View("Form", viewData);
}
Hatırlanması Gereken Önemli Noktalar
- TempData, tek bir istek ve sonraki istek için geçerlidir, bu da yönlendirme sırasında verileri korumanıza olanak tanır ki bu, doğrulama açısından önemlidir.
- Form verilerine etkin bir şekilde erişmek için
TempData["form"]
‘u doğru bir şekilde döktüğünüzden emin olun. TempData
‘ya erişmeden önce her zaman null kontrolü yaparak olası istisnaları önleyin.
Sonuç
ASP.NET MVC’de orijinal POST
istek verilerini koruyarak formdan geri yönlendirme yapılması TempData
kullanılarak mümkündür. Bu yöntem, kullanıcı deneyiminin akıcı kalmasını sağlarken, gerekli doğrulama kontrollerinin bağlam kaybı olmadan gerçekleştirilmesine olanak tanır. Yukarıdaki çözümü uygulayarak, form gönderimlerini ve yönlendirmeleri kullanıcı merkezli bir şekilde etkili bir şekilde yönetebilirsiniz.
TempData
‘yı kullanarak, kullanıcıların herhangi bir doğrulama hatası durumunda verilerinin sağlam bir şekilde korunmasını sağlayarak uygulamalarınızın güvenilirliğini ve kullanılabilirliğini artırırsınız.
ASP.NET MVC’de kullanıcı deneyimini sorunsuz hale getirelim.