MVC2 与 JQuery 的 Ajax 实现局部刷新的问题
来源:互联网 发布:openwrt 设置无线 mac 编辑:程序博客网 时间:2024/05/17 21:07
目标:两个DropDownList 控件,DDL1,DDL2。实现DDL1 选择后,根据选定值到数据库查询数据,返回并绑定到DDL2。
实现:JQuery中的$.Ajax方法以及MVC中的PartialView控件
具体:
首先MVC视图上的数据,都通过一个数据模型进行格式化存储
namespace ES.DataModels{ public class ListSearchModels { /// <summary> /// 客户ID /// </summary> public int CustomerID { get; set; } /// <summary> /// 主叫电话号码 /// </summary> public string PhoneNumber { get; set; } /// <summary> /// 客户下拉选择器的 SelectListItem /// </summary> public List<SelectListItem> CustomerSelectList { get; set; } /// <summary> /// 电话号码下拉选择器 /// </summary> public List<SelectListItem> PhoneSelectList { get; set; } } }
在主视图定义以下两个DDL控件,分别是:
客户列表的下拉控件
<%: Html.DropDownListFor(x => x.CustomerID, this.Model.CustomerSelectList, "-请选择公司-")%>客户电话号码的下拉控件(PartialView)
<% Html.RenderPartial("GetPhoneNumberList"); %>
并且绑定一个OnChange事件到客户列表
<script language="javascript" type="text/javascript"> $(document).ready(function () { $("#CustomerID").change(function () { GetPhoneNumber('<%=Url.Action("GetPhoneNumberList","Data") %>'); }); });</script>在这里有个问题,本来是可以直接在 Html.DropDownListFor上进行绑定,如:
<%: Html.DropDownListFor(x => x.CustomerID, this.Model.CustomerSelectList, "-请选择公司-", new { onChange(Parameter)})%>
但因为要将<%=Url.Action("<%=Url.Action("GetPhoneNumberList","Data") %>作为参数传递给JS,而<%=Url.A..%>跟外部的<%: Html.D...%>产生冲突,所以只好用JQuery加载绑定
定义<% Html.RenderPartial("GetPhoneNumberList"); %>这个用户控件的Action:
#region GetPhoneNumberList:根据客户下拉框选择项读取该用户号码 | Eason.L / 2011.08.21 /// <summary> /// 根据客户下拉框选择项读取该用户号码 /// </summary> /// <param name="CustomerID"></param> /// <returns></returns> public PartialViewResult GetPhoneNumberList(string CustomerID) { // 自定义的数据库操作类 CustomerDataControl CustomerDataDAL = new CustomerDataControl(); // 根据客户ID查询该客户的所有电话号码 List<string> CustomerNumbers = CustomerDataDAL.GetCustomerNumberList(Convert.ToInt32(CustomerID)); // 新建一个 SelectListItem List 来进行转换 List<SelectListItem> TempSelectListItem = new List<SelectListItem>(); ListSearchModels PartialModels = new ListSearchModels(); if (CustomerNumbers != null) { PartialModels.PhoneNumber = "PhoneNumberList"; foreach (var item in CustomerNumbers) { TempSelectListItem.Add(new SelectListItem { Value = item.ToString(), Text = item.ToString() }); } PartialModels.PhoneSelectList = TempSelectListItem; // 数据填入页面的数据模型对应的List } // 返回PartialView return PartialView("GetPhoneNumberList", PartialModels); }#endregion
根据这个Action,生成一个用户控件GetPhoneNumberList.ascx,其实只有一个下拉控件,跟对应字段绑定
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ES.DataModels.ListSearchModels>" %><%=Html.DropDownListFor(x=>x.PhoneNumber,this.Model.PhoneSelectList) %>
MVC部分功能完成,接下来用JQuery实现Ajax调用:
function GetPhoneNumber(action) { var SelectCustomerID = $("#CustomerID").val(); $.ajax({ url: action, type: "POST", data: { "CustomerID": SelectCustomerID }, dataType: "html", success: function (data) { $("#PhoneNumber").html(data); } });}
(这里存在一个问题尚未解决,就是采用$("#PhoneNumber").html(data); 更新页面的时候,IE浏览器是无效的,查了资料,说是IE对这个方法不支持所导致的,但即使改为document.getElementby("PhoneNumber").innerhtml = data;这样的JavaScript原生代码也还是不行,如果有解决方案的盆友,请指导一下,谢谢。)
这里要注意的地方是:action 和 dataType 两个参数
action就是要异步调用的页面或MVC中的某个Action,我们是通过<%=Url.Action("<%=Url.Action("GetPhoneNumberList") %>将完整的GetPhoneNumberList这个Action的路径传进来。
dataType使用的是html,否则success部分的回调无法执行。
如果GetPhoneNumberList这个Action用的不是PartialViewResult的类型,而是采用JsonResult类型回传Json数据的话,那么这里的dataType要用"json"
最后,要注意的是,如果返回的 CustomerSelectList 为空的话,程序是会报错的,这里要进行一些相关的处理。其他的……至此,工作完成
- MVC2 与 JQuery 的 Ajax 实现局部刷新的问题
- JQuery的Ajax请求实现局部刷新
- jquery实现的Ajax局部刷新
- JQuery与Ajax实现异步局部刷新
- JQuery的Ajax请求实现局部刷新 小案例
- jquery ajax 实现标签容器内的局部刷新
- jQuery局部刷新的实现
- JQuery的AJAX局部刷新使用操作
- JS与Ajax实现异步局部刷新的原理
- 利用ajax实现页面的局部刷新
- 简单的ajax实现局部刷新
- ajax实现网页的局部刷新
- 问题:关于Ajax.BeginForm MVC3与MVC2的区别
- 通过jQuery实现Ajax局部刷新
- js 和Jquery 实现Ajax 局部刷新
- jQuery实现AJAX定时局部页面刷新
- jQuery实现AJAX定时局部页面刷新
- jQuery实现AJAX定时局部页面刷新
- WebKit内核源代码分析(三)
- POJ2387
- 将图片转换成二进制数据
- css 学习
- iOS获取当前系统的相关信息
- MVC2 与 JQuery 的 Ajax 实现局部刷新的问题
- linux在线安装软件 screen使用方法
- ORACLE—误删表后的恢复
- 移动增值业务概述
- 在windows server 2003服务器上提供NTP时间同步服务
- 个人封装!
- .Net可以做什么
- 将二进制数据转化成图片
- Juery得到ajax格式返回的josn数据