真正走進ASP
曾經天真的想法
下面就談談我是如何認識到這個的
還是以之前文章中的博客園站內短消息功能(顯示當前用戶短消息列表)為例
也就是說原來服務端返回的是實體類對象列表
顯然這種方法易出錯
Page page = new Page();
Control control = page
((IRenderable<List<SiteMsg>>)control)
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
control
return sb
}
}
由於MsgListControl
這裡需要通過一個另外的IRenderable<T>接口來實現數據的綁定
public partial class MsgListControl : UserControl
{
public void PopulateData(List<SiteMsg> siteMsgList)
{
rptMsgList
rptMsgList
}
}
public interface IRenderable<T>
{
void PopulateData(T data);
}
在WCF服務中通過調用接口中的PopulateData方法進行數據的綁定
這個方法增加了額外的接口
於是
應用場景
期望的效果
一開始遇到了兩個小問題
a) MapRoute配置之後
<validation validateIntegratedModeConfiguration=
<modules runAllManagedModulesForAllRequests=
b) 繼續訪問
然後進入MVC相關代碼編寫
Controller的代碼如下
public class MsgController : Controller
{
[HttpPost]
public ActionResult List(SiteMsgQuery msgQuery)
{
List<SiteMsg> siteMsgList = GetInboxMsgList(msgQuery);
return View(
}
}
需要注意的就一個地方
View的代碼(MsgList
@using CNBlogs
@model List<SiteMsg>
@foreach(SiteMsg msg in Model){
<div class=
<div class=
<div class=
<div class=
</div>
}
比在
客戶端js調用代碼如下
function GetMsgList(pageIndex
var msgQuery = {}
msgQuery
msgQuery
$
$
$
$
$(
};
$
}
需要注意的是兩個地方(因為服務器端Controller返回的不是json格式的數據)
a) dataType不要用json
b) 返回數據就在data中
這樣
原來在ASP
解決了Ajax的問題
在頁面的View中直接重用剛才Ajax所用的View就行了
View(Inbox
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
@Html
</body>
</html>
Control
public class MsgController : Controller
{
public ActionResult Inbox()
{
SiteMsgQuery msgQuery = new SiteMsgQuery()
{
PageIndex =
PageSize =
};
List<SiteMsg> siteMsgList = GetInboxMsgList(msgQuery);
return View(
}
}
搞定!真的很方便!想要的解決方案就是它
From:http://tw.wingwit.com/Article/program/net/201311/13877.html