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!