µ±Ç°Î»ÖãºÊ×Ò³ > ÍøÂç±à³Ì > WEB±à³Ì > ASP.net > ΪASP.NET MVC¿ò¼ÜÌí¼ÓAJAXÖ§³ÖÏÂ

ΪASP.NET MVC¿ò¼ÜÌí¼ÓAJAXÖ§³ÖÏÂ

µã»÷´ÎÊý£º22 ´Î ·¢²¼ÈÕÆÚ£º2008-11-22 11:31:31 ×÷ÕߣºÔ´´úÂëÍø
Ô´´úÂëÍøÍÆ¼ö

¡¡Èý¡¢ÔÚ¿ØÖÆÆ÷ÖмÓÈëAJAXÖ§³Ö¼¼Êõ

¡¡¡¡ÔÚ´Ë£¬ÎÒÃÇÒª×öµÄµÚÒ»¼þÊÂÇéÊÇ´ÓAjaxControllerÀࣨ¶ø²»ÊÇÖ±½Ó´ÓControllerÀࣩÖÐÅÉÉúÀàTaskListController¡£

¡¡¡¡AjaxControllerÊÇÎÒ¸Õ¸ÕÌí¼ÓµÄÒ»¸öÀ࣬´ËÀàÒýÈëÁËÒ»¸öеÄÊôÐÔIsAjaxRequest¡£ÎÒÔÚ×Ô¼ºµÄAction·½·¨ÖоÍʹÓÃÕâ¸öÊôÐÔÀ´Íê³ÉÖîÈçÉú³É²»Í¬ÊÓͼ֮ÀàµÄÈÎÎñ¡£´ËÍ⣬Ëü»¹ÒýÈëÁËһЩ³ÉÔ±º¯Êý£¬ÀýÈçRenderPartial¡£Õâ¸öRenderPartialº¯Êý¿ÉÒÔÓÃÓÚÉú³É¶¨ÒåÔÚÒ»¸ö²¿·ÖÊÓͼÖеÄÓû§½Ó¿ÚµÄÒ»²¿·Ö¡£ÏÂÃæ¸ø³öÐ޸ĺóµÄ¿ØÖÆÆ÷ÒÔ¼°ÐÂÐ޸ĵÄAdd·½·¨£¨ÆäÖÐÐ޸IJ¿·Ö¼°Ìí¼Ó²¿·Ö¾ùÒÔ´ÖÌåÏÔʾ£©£º

¡¡¡¡public class TaskListController : AjaxController {
¡¡¡¡public void Add(string name) {
¡¡¡¡Task newTask = null;
¡¡¡¡if (String.IsNullOrEmpty(name) == false) {
¡¡¡¡newTask = _taskDB.AddTask(name);
¡¡¡¡}
¡¡¡¡if (IsAjaxRequest) {
¡¡¡¡if (newTask != null) {
¡¡¡¡RenderPartial("TaskView", newTask);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡else {
¡¡¡¡if (newTask != null) {
¡¡¡¡RedirectToAction("List");
¡¡¡¡}
¡¡¡¡else {
¡¡¡¡Dictionary<string, object> viewData = new Dictionary<string, object>();
¡¡¡¡viewData["Tasks"] = _taskDB.GetTasks();
¡¡¡¡viewData["ShowAddTaskError"] = true;
¡¡¡¡RenderView("List", viewData);
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}
¡¡¡¡}

¡¡¡¡½ÓÏÂÀ´£¬ÎÒ°ÑTaskViewÖØÐ¶¨ÒåΪһ¸ö×Ô¶¨Òå¿Ø¼þTaskView.ascx£¨Î»ÓÚ/Views/TaskListÎļþ¼ÐÏ£©£¬´úÂëÈçÏÂËùʾ£º
<div id="taskItem<%= Task.ID %>" class="taskPanel">
¡¡¡¡<form method="post" action="<%= Url.Action("CompleteTask") %>">
¡¡¡¡<input type="hidden" name="taskID" value="<%= Task.ID %>" />
¡¡¡¡<input type="submit" name="completeTask" value="Done!" />
¡¡¡¡<input type="submit" name="deleteTask" value="Delete" />
¡¡¡¡<span><%= Html.Encode(task.Name) %></span>
¡¡¡¡</form>
¡¡¡¡</div>

¡¡¡¡Æäʵ£¬ÉÏÃæµÄ´úÂë½ö½öÊÇÇ°Ãæ½éÉܵÄList.aspxµÄ¼òµ¥Öع¹£¨ËùÒÔ£¬Äã¿ÉÄÜ¿´ÉÏȥʮ·ÖÊìϤÕâ¶Î´úÂ룩¡£ÏàÓ¦ÓÚÕâ¸öÓû§¿Ø¼þµÄViewDataÊÇÒ»¸öTaskÀàµÄʵÀý¡£ÏÖÔÚ£¬¼ÈÈ»ÎÒÃÇÒѾ­¶¨ÒåÁËÕâÒ»²¿·Ö£¬ÄÇô½ÓÏÂÀ´ÎÒÃǾͿÉÒÔ´Ó±¾ÀýÖ÷ÒªµÄÊÓÍ¼Ò³ÃæList.aspxÖÐʹÓÃËüÁË¡£ÕâÒ»µãÊǽèÖúÓÚÇ°ÃæÎÒÌṩµÄRenderPartialÀ©Õ¹·½·¨ÊµÏֵġ£Ò»µ©×öµ½ÕâЩ£¬ÊÓͼList.aspxµÄÈÎÎñÁÐ±í²¿·Ö½«±äΪ£º

¡¡<div id="taskList">
¡¡¡¡<% foreach (Task task in Tasks) { %>
¡¡¡¡<div>
¡¡¡¡<% this.RenderPartial("TaskView", task); %>
¡¡¡¡</div>
¡¡¡¡<% } %>
¡¡¡¡</div>

¡¡¡¡½ÓÏÂÀ´£¬ÎÒÐèÒªÈôËÊÓͼ·¢³öXMLHttpÇëÇó¶ø²»ÊÇÒ»¸ö´«Í³µÄ±íµ¥Ìá½»¡£ÔٴΣ¬ÎÒÌṩÁËһЩÀ©Õ¹·½·¨£º

¡¡¡¡¢ÅRenderBeginFormÃèÊöµÄÊÇÒ»¸öÆÕͨµÄ±íµ¥±êÇ©£»
¢ÆRenderBeginAjaxForm½«¸ºÔðÉú³ÉÒ»¸öÖ§³ÖAJAX¹¦ÄÜµÄ±íµ¥£¨ÕâÕýÊÇÎÒÃǵÄÐËȤµãËùÔÚ£©£»

¡¡¡¡¢ÇRenderEndForm¡£

¡¡¡¡½èÖúÓÚÕâЩ·½·¨£¬ÊµÏÖÌí¼ÓÈÎÎñµÄUI±íµ¥±êÇ©²¿·Ö¿´ÉÏÈ¥ÈçϼӴֲ¿·ÖËùʾ£º

¡¡¡¡<% RenderBeginAjaxForm(Url.Action("Add"),
¡¡¡¡new { Update="taskList, UpdateType="appendBottom",
¡¡¡¡Highlight="True",
¡¡¡¡Starting="startAddTask", Completed="endAddTask" }); %>
¡¡¡¡<input type="text" name="name" />
¡¡¡¡<input type="submit" name="addTask" value="Add Task" />
¡¡¡¡<% RenderEndForm(); %>

¡¡¡¡ÈçÄãËù¼û£¬±íµ¥µÄÄÚÈݲ¢Ã»Óз¢Éú±ä»¯£¬½ö½öÊÇÉùÃ÷µÄÐÎʽ·¢ÉúÁ˱仯¡£ÔÚÉÏÃæµÄ´úÂëÖУ¬RenderBeginAjaxForm½ÓÊÕµ±Ìá½»±íµ¥Ê±ÃèÊöÒªµ÷ÓõÄÐÐΪµÄURL£¬ºóÃæ¸ú×ŵÄÊÇÈçϵÄһЩAjaxÌØ¶¨²ÎÊý£º

¡¡¡¡? Update£º´Ë²ÎÊýÏàÓ¦ÓÚʹÓýá¹û½øÐиüеÄDOM ÔªËØµÄidÖµ¡£ÔÚ±¾ÀýÖУ¬Ëü¶ÔÓ¦ÓÚÃèÊö´æ·ÅËùÓÐÈÎÎñÏîµÄÈÝÆ÷¡£

¡¡¡¡? UpdateType£º´Ë²ÎÊýȡֵ¿ÉÒÔΪ¡°none¡±£¬¡°replace¡±£¬¡°replaceContent¡±£¬¡°insertTop¡±£¬»òÕß¡°appendBottom¡±ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÎÒÃǸøËüµÄ¸³ÖµÊÇ×îºóÃæµÄÖµ¡°appendBottom¡±£¬´ËÖµ½«Ê¹µÃÐÂäÖȾÉú³ÉµÄÈÎÎñÏÔʾÓÚÕû¸öÈÎÎñÁбíµÄµ×²¿¡£

¡¡¡¡? Highlight£º´Ë²ÎÊýÊÇ¿ÉÑ¡µÄ¡£µ±ÉèÖô˲ÎÊýʱ£¬ÐÂÌí¼ÓµÄÏ»á¸ßÁÁÏÔʾһ»á¶ù£¬³ÊÏÖ΢΢´øµã»ÆÉ«µÄ½¥ÒþЧ¹û¡£

¡¡¡¡? StartingºÍCompleted£ºÕâÁ½¸ö²ÎÊýʵÖÊÉ϶¼ÊÇʼþ¡£ÎÒÃÇ¿ÉÒÔ±àдһ¶ÎJavascript´úÂëʵÏÖÀýÈç½ûÓð´Å¥£¬ÏÔʾ½ø¶ÈָʾÆ÷£¬¡¡ ÔÚ·¢³öµÄÇëÇóÖÐÌí¼Ó¶îÍâÄÚÈÝ»òÔ¤´¦Àíµ½À´µÄÏìÓ¦£¬µÈµÈ
ÏÂÃæÊÇJavascript´úÂ루λÓÚÎļþTaskList.jsÖУ¬´ËÎļþλÓÚʾÀý³ÌÐòµÄ/Views/ScriptsÎļþ¼ÐÏ£©¡£

¡¡function startAddTask() {
¡¡¡¡$("addTaskGroup").disabled = true;
¡¡¡¡return true;
¡¡¡¡}
¡¡¡¡function endAddTask() {
¡¡¡¡$("addTaskGroup").disabled = false;
¡¡¡¡return true;
¡¡¡¡}

¡¡¡¡ÔÚÉÏÃæµÄstartAddTask·½·¨ÖУ¬ÎÒÃǽøÐÐÁËУÑé²Ù×÷¡£ÔÚ´Ë£¬Çë×¢ÒâÈç¹ûÏàÓ¦µÄÐÎʽÎÞЧ£¬ÄÇôΪÁ˱ÜÃâÔÚÕâÑùÇé¿öÏÂÒ²·¢³öÇëÇóÐèÒª·µ»Øfalse¡£×¢Ò⣬ÕâÀïµÄ´úÂë½ö½öչʾÁËһЩ»ù±¾ÐÎʽµÄУÑé±àÂë¡£

¡¡¡¡×îºóÒ»²½ÊÇÌí¼Ó½ø½Å±¾TaskListÒÔ¼°ÌṩÏàÓ¦ºËÐŦÄܵĽű¾¿ò¼Ü¡£ÏÖÔÚ£¬ÎÒÃÇÀ´´ò¿ªÎ»ÓÚÎļþ¼Ð/Views/LayoutsϵÄʾÀý³ÌÐòµÄĸ°æÒ³Ã棬ȻºóÌí¼ÓһЩָÁîÒÔ³õʼ»¯Ajax¹¦ÄÜ¡¢×¢²á½Å±¾²¢ÔÚ×îÖÕÉú³ÉµÄHTML´úÂëµÄ×îºóÊä³ö½Å±¾¡£ÕâÊÇͨ¹ýµ÷ÓÃÎÒÌí¼Óµ½Ajax¶ÔÏóÖеÄÀ©Õ¹·½·¨ÊµÏֵģº

¡¡¡¡<% Ajax.Initialize(); %>
¡¡¡¡<% Ajax.RegisterScript("~/Views/Scripts/TaskList.js"); %>
¡¡¡¡<!UI²¿·Ö¶¨ÒåÔÚ´Ë-->
¡¡¡¡<% Ajax.RenderScripts(); %>

¡¡¡¡Êµ¼ÊÉÏ£¬ÎÒҪʵÏÖµÄÁíÒ»ÏîÈÎÎñ¾ÍÊÇÌí¼ÓÒ»¸ö²âÊÔÓÃÀý¡£ÓÚÊÇ£¬ÎÒÌí¼ÓÒ»¸ö²âÊÔÓÃÀýÓÃÓÚ²âÊÔÎҵĿØÖÆÆ÷ÖÐAjax»¯µÄAction·½·¨Add¡£

¡¡¡¡½ÓÏÂÀ´£¬ÎÒÃÇ¿ÉÒÔÕë¶ÔÍê³ÉºÍɾ³ýÁ½¸öÈÎÎñÌí¼ÓͬÑùÏàËÆµÄ²âÊÔÓÃÀý¡£ÆäÖУ¬Íê³ÉÈÎÎñ½«µ¼ÖÂÏàÓ¦ÓÚ´ËÈÎÎñµÄUIÖØÐÂÉú³É£¬Ê¹ÓÃеÄHTML´úÌæÏÖÓеÄHTML¡£¶øÏà±È֮ϣ¬É¾³ýÈÎÎñ¸üΪÓÐȤЩ£º²»ÊǸüÐÂHTML£¬¶øÊÇÔ­ÓÐÄÚÈÝ´ÓDOM½á¹¹ÖÐÒÆ³ý£¬¸ÄÒÔʹÓÃHighlightLeave Ч¹û£¨Ò»ÖÖºìÉ«½¥ÒþЧ¹û£©Ôì³ÉÊÓ¾õÉϸüΪÒýÈËעĿ¡£Äã¿ÉÒÔ½øÒ»²½·ÖÎö±¾Ê¾ÀýÔ´ÂëÀ´Á˽âÆäÖеÄÔ­Àí£¨ÌØ±ðÊÇÎļþTaskList.jsºÍTaskView.ascx£¬ÒÔ¼°Ïà¹ØÁªµÄ¿ØÖÆÆ÷ÖеÄAction·½·¨£©¡£
ËÄ¡¢Ìí¼ÓÆäËûµÄAJAX¼¼Êõ

¡¡¡¡ÎÒÃÇÍêÈ«¿ÉÒÔʵÏÖÀàËÆÓÚ°üº¬ÔÚTaskView.ascxÖеÄ<form>²¿·Ö¡£¶øÇÒ£¬ÎÒÃÇͬÑù¿ÉÒÔÆäÖÐÃèÊöÿһ¸öÈÎÎñÏµ«ÊÇÈ´Äܹ»°ÑÒ»¸ö³£¹æµÄ»ùÓÚÌá½»µÄ±íµ¥×ª»»³ÉÒ»¸öÖ§³ÖAJAX¼¼ÊõµÄ±íµ¥¡£ÕâÑùÒÔÀ´£¬ÈÎÎñÏîµÄ±à¼­Óëɾ³ý²Ù×÷¾Í¿ÉÒÔÔÚ¾Ö²¿Ë¢ÐÂ״̬ÏÂʵÏÖ¡£Ê¾Àý´úÂëÖжԴË×÷Á˽âÊÍ£¬Ôڴ˲»ÔÙ׸Êö¡£

¡¡¡¡½ÓÏÂÀ´£¬ÎÒÏë½éÉܵÄÊÇÈçºÎÌí¼ÓһЩ½Å±¾²¢°ÑËüÌí¼Óµ½ÎÒÃǵÄʾÀý³ÌÐòµÄUIÖд´½¨ÆäËû»ùÓÚAJAXµÄ½»»¥¶øÉú³ÉµÄHTML¡£¾ßÌåµØËµ£¬ÎÒÏëÔÚÎı¾¿òÖÐÌí¼ÓÒ»¸öˮӡЧ¹û£¬´ËЧ¹ûΪÓû§ÊäÈëÌṩÁ˼«ÎªÓѺõÄÓû§Ö±¹ÛÐÔÌáʾ¡£Ö»ÒªÃ»ÓÐÓû§ÊäÈ룬´ËˮӡЧ¹û¾Í»áÏÔʾ³öÀ´£¬¶øµ±Óû§°ÑÊäÈë½¹µã¶¨Î»ÓÚÎı¾¿òÖÐʱ¼´Ë®Ó¡Ð§¹ûÏûʧ¡£

¡¡¡¡µ±È»£¬Æª·ùËùÏÞ£¬ÎÒÃÇÒ²²»»á¹ýÓÚϸÖµØÈ¥ÌÖÂ۽ű¾±¾Éí¡£Óйش˽ű¾ÏêϸÄÚÈÝ£¬Çë²Î¿¼±¾ÎÄÔ´Â룬µ«ÊÇÐèÒªÖ¸³öµÄÊÇÕâ¸öˮӡЧ¹û±»ÊµÏÖΪ´ó¼Ò¿ÉÄÜÊìϤµÄASP.NET AJAX¿ò¼ÜµÄÒ»¸ö¿Í»§¶ËÐÐΪ£¨Behavior£©×é¼þ¡£¾ÍÏñÈÎºÎÆäËûÐÐΪ×é¼þÒ»Ñù£¬ÎÒÃǵÄʾÀýÖÐËùʹÓõÄÎı¾¿òÒ²ÊÇÓëDOMÔªËØÏà¹ØÁª£¬¶øÇÒËüʵÏÖÁ˶ԴËÔªËØÒý·¢µÄÏà¹ØÊ¼þµÄ¶©ÔÄ¡£

¡¡¡¡ÔÚ´«Í³µÄweb±íµ¥Ò³ÃæÖÐ,ÎÒ¾­³£»áÖ±½ÓʹÓÃÖ§³ÖAJAX¹¦ÄܵķþÎñÆ÷¿Ø¼þ£¬ÀýÈçWatermarkExtender£¬²¢Ê¹Ö®¹ØÁªµ½Ò»¸ö·þÎñÆ÷¿Ø¼þ¡£µ«ÊÇ£¬ÔÚ±¾ÀýÖУ¬ÎÒʹÓÃÁËÁíÒ»ÖÖÀ©Õ¹·½·¨À´ÊµÏÖäÖȾЧ¹û¡£Í¨¹ý´Ë·½·¨£¬ÎÒÒ²¿ÉÒÔʵÏÖ´´½¨²¢³õʼ»¯½Å±¾ÐÐΪ×é¼þµÄÒ»¸öʵÀý¡£ÏÂÃæ¸ø³öÁËÎÒ¸üÐÂÒÔºóµÄÊÓͼ¹Ø¼ü²¿·ÖµÄ´úÂëÆ¬¶Ï£º

¡¡<% RenderBeginAjaxForm(Url.Action("Add"),
¡¡¡¡new { Update="taskList, UpdateType="appendBottom",
¡¡¡¡Highlight="True",
¡¡¡¡Starting="startAddTask", Completed="endAddTask" }); %>
¡¡¡¡<input type="text" name="name" id="nameTextBox" />
¡¡¡¡<% Ajax.Watermark("nameTextBox",
¡¡¡¡new { watermarkText="[What do you need to do?]",
¡¡¡¡watermarkCssClass="watermark"}); %>
¡¡¡¡<input type="submit" name="addTask" value="Add Task" />
¡¡¡¡<% RenderEndForm(); %>


¡¡¡¡ÉÏÃæµÄÀ©Õ¹·½·¨ÊµÏÖÏ൱¼òµ¥¡£Æäʵ£¬ËüÒ²¾ÍÊǵ÷ÓÃÁËÏֳɵÄAjax¿ò¼Ü¡£ÏÂÃæÊÇÎÒ¶¨ÒåµÄWatermarkBehaviorÀàÏàÓ¦µÄ´úÂ룺

¡¡¡¡public static class WatermarkBehavior {
¡¡¡¡public static void Watermark(this AjaxHelper ajaxHelper, string id, object watermarkOptions) {
¡¡¡¡ajaxHelper.RegisterScript("~/Views/Scripts/Watermark.js");
¡¡¡¡ajaxHelper.RegisterScriptBehavior(id, "Ajax.Watermark", watermarkOptions);
¡¡¡¡}
¡¡¡¡}

¡¡¡¡µ±È»£¬ÎÒÃÇ»¹¿ÉÒÔ¸üϸÖµؿØÖÆÉÏÃæµÄ±àÂ룬µ«ÕâÀï½öչʾÁËÌṩËѼ¯×¢²áµÄ½Å±¾¹¦ÄܺËÐIJ¿·ÖµÄ´úÂëÆ¬¶Ï£¬ÒÔ¼°°ÑËüÃÇÉú³Éµ½Ò³ÃæÖУ¬È»ºóʵÀý»¯ÐÐΪ¶ÔÏ󣬲¢Ê¹ÆäÓëÏàÓ¦µÄDOMÔªËØ½¨Á¢¹ØÁª£¬ÒÔ¼°´«µÝ½øÊÓͼÌṩµÄÑ¡ÔñÒÔ±ã¶¨ÖÆ¾ßÌåµÄʵÀý¡£

¡¡¡¡Îå¡¢½áÂÛ

¡¡¡¡¹éÄÉÀ´¿´£¬±¾ÎÄÒ²Ö»²»¹ýÊDzäÁ˲ä»ùÓÚMVC¿ò¼Ü½øÐÐASP.NETÒ³Ãæ±à³ÌÖÐËùÉæ¼°µÄ¾Ö²¿¸üУ¬ÐÐΪºÍÀ©Õ¹Æ÷¿Ø¼þµÈAjax¹¦ÄܵĺËÐÄ·½Ãæ¡£ÎÒÏàÐÅ£¬³ýÁËÉÏÃæÕâÁ½ÖÖÇé¿öÍ⻹ÓдóÁ¿µÄÆäËûÄÚÈÝÐèÒª½øÐÐAjax»¯£¨Ð£Ñ飬ͬÆÚÐÔˢУ¬Í¨¹ý½Å±¾´úÀíÒÔ¼°web·þÎñµÈ¼¼Êõ½øÒ»²½¼ò»¯µ÷ÓÿØÖÆÆ÷·½·¨µÈ£©¡£×îºó£¬¶ÁÕß¿ÉÒÔÏêϸÑжÁÎÒÌṩµÄʾÀý´úÂë²¢¸øÓèÏàÓ¦µÄ¸Ä½ø

Ô´´úÂëÍø¹©¸å.
ÉÏһƪ: ASP函数库4  ÏÂһƪ: ASPº¯Êý¿â3
ÍøÓÑÆÀÂÛ (0)
»áÔ±ÖÐÐÄ
ÍøÂç±à³Ì
±¾Õ¾ÍƼö
ÍøÂç±à³ÌÖ®¾«»ª