最近几天搞了。Net mvc2的项目,在里面用到了mvc2里面自带的微软的Ajax和jQuery。
熟悉了一下mvc的流程,用Ajax做了一个网上聊天的小程序,主要意思是双方不停的用Ajax刷新同一个函数,如果有了变化则读取最新数据。
Mvc2是在。Net2010中的项目,用的是framework4,和一些新的架构,我在xp的IIS上尝试配置,遇到了很多问题,于是采用win7的IIS7做配置。
在win7中安装iis7也是在控制面板=>
中选择
在安装IIS是切记要把asp.net勾选上。否则报错,我第一次就没勾选。
配置mvc2网站时,由于我用的是默认的framework4,而win7自带的是framework3.5,所以要先装framework4,新建网站的时候
应用程序池中选择自己所用的framework版本,这个我找了好久也没有找到如何更改。。。
Mvc2的bin文件夹中,并不包含system.Web.Mvc.dll程序集,所以要在编译网站的时候,将此dll选择复制到本地。或者直接找到此dll放到bin文件夹下。否则会报错缺少此dll,
不明白为什么微软不把此dll封装到framework4中,还要如此麻烦一下。
以上是此网站的配置过程。
下面是这个聊天网站的难点
通过查MSDN中的例子,我只学习到了如何在控件中运用微软的Ajax方法,确实很简单很爽.但是我想通过JavaScript的setTimeout函数无限刷新一个Ajax函数,用来一直跟服务器交互,可是找了半天也没有找到调用方法,我指的是微软的那种AjaxOptions的方法,并不是最原始最根本的JavaScript的Ajax方法.如果各位大哥谁知道请告诉小弟一声.
于是放弃微软的Ajax方法,改用jQuery的.(反正框架中带而且这玩意还特火)
于是在jQuery的官网上查到了jQuery的最基本的方法.
发现只要符合Ajax的URL符合微软mvc2的规定,还是能很容易的和controller中的函数交互但是中途发现了一个大问题,就是在Ajax不断的刷新页面的时候,前2,3次的返回值是正确的,以后的返回值发生错误,这个问题郁闷了我很久,怎么也找不到原因,最后在各方努力之后,发现此问题只有在ie系列的浏览器有问题,在chrome和Firefox中都正常.我觉得这是jQuery对ie浏览器支持中的一个小bug…也越来越理解为何大家对ie浏览器的不爽...
下图是运行界面.
下面为controller中主要函数
public class yuanController : Controller
{
static List<string> database = null;
/// <summary>
/// 不?断?被À?刷¡é新?的Ì?函¡¥数ºy,用®?来¤¡ä标À¨º示º?是º?否¤?有®D人¨?新?说¦Ì了¢?话¡ã
/// </summary>
/// <param name="count">发¤¡é送¨ª人¨?说¦Ì话¡ã的Ì?条¬?数ºy</param>跟¨²服¤t务?器¡Â端?说¦Ì话¡ã的Ì?条¬?数ºy对?比À¨¨,如¨?果?不?相¨¤同ª?,则¨°刷¡é新?内¨²容¨Y
/// <returns>返¤¦Ì回?现?在¨²服¤t务?器¡Â的Ì?条¬?数ºy</returns>
[ActionName("xun")]
public void IsNew(int? count)
{
if (database == null)
{
Response.Write("-1");
return;
}
else
{
//Response.Write("<script>alert(" + database.Count + ");</script>");
Response.Write(Convert.ToString(database.Count - 1));
}
//if (database.Count-1 == count)
//{
// Response.Write("相¨¤等̨¨");
// //return Convert.ToString(database.Count - 1);
//}
//else
//{
// Response.Write("不?相¨¤等̨¨");
// //return Convert.ToString(database.Count - 1);
//}
}
/// <summary>
/// 用®?户¡ì的Ì?说¦Ì话¡ã方¤?法¤¡§
/// </summary>
/// <param name="shuru">用®?户¡ì所¨´说¦Ì的Ì?内¨²容¨Y</param>
/// <returns>返¤¦Ì回?说¦Ì话¡ã成¨¦功|</returns>
[ActionName("speak")]
public string speak(string shuru)
{
if (database == null)
{
database = new List<string>();
}
database.Add(Request.UserHostAddress.ToString() + ":<br />" + shuru + "<br />");
return Convert.ToString(database.Count - 1);
}
/// <summary>
/// 取¨?得Ì?数ºy据Y的Ì?方¤?法¤¡§,不?是º?全¨?返¤¦Ì回?,只?是º?返¤¦Ì回?现?在¨²用®?户¡ì没?有®D的Ì?
/// </summary>
/// <param name="count">用®?户¡ì现?在¨²的Ì?说¦Ì话¡ã条¬?数ºy</param>
/// <returns>用®?户¡ì现?在¨²没?有®D的Ì?话¡ã</returns>
[ActionName("getdate")]
public void getdate(int? count)
{
string content = null;
if (database != null)
{
for (int i = 0 /*Convert.ToInt32(count)*/; i < database.Count; i++)
{
content += database[i];
}
}
//return content;
Response.Write(content);
}
下面为aspx中主要函数
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script type="text/javascript" >
$(document).ready(function () {
var mycount = -1;
function yuan() {
$.ajax({
url: "yuan/xun", //?count=" + mycount,
//type: "GET",
//context: document.body,
success: function (date1) {
if (mycount != date1) {
$("#status").html("有®D新?内¨²容¨Y,将?要°a提¬¨¢取¨? mycount=" + mycount + " date1=" + date1);
myget(date1);
}
else {
$("#status").html("没?新?内¨²容¨Y mycount=" + mycount + " date1=" + date1);
//myget(date1);
}
}
});
setTimeout(yuan, 1000);
};
yuan();
function myget(count1) {
$.ajax({
url: "yuan/getdate",
//type: "POST",
//context: document.body,
success: function (date2) {
$("#status").html("正y在¨²提¬¨¢取¨? mycount=" + mycount + " count1=" + count1 + " date2=" + date2);
var content = $("#yuan1").html() + date2;
$("#yuan1").html(date2);
mycount = count1;
}
});
};
});
<p>
<% using(Ajax.BeginForm("speak",
new AjaxOptions{UpdateTargetId="textEntered1"})) { %>
<%= Html.TextBox("shuru","Enter text")%>
<input type="submit" value="Submit"/><br />
<span id="textEntered1">Nothing Entered</span>
<% } %>
</p>