郁闷,这个问题 我搞了好长时间 都没能获得满意的效果,,哪位兄弟若能帮我解决 一定重谢.
就是 两个 DropDownList 联动的问题,1.我希望 实现 客户端联动 也就是不希望它联动闪烁.
2.后台获得 DropDownList 选中的值,插入数据库.
3.查询数据库 然后把 查到的值 如:北京市 朝阳区 绑定到 这两个DropDownList 上也就是 一个页面 Page_Load 显示用户信息 Button事件 修改用户信息.
看起来和简单,但做起来总是有好多问题,希望大家能给出 详细解决办法,,一定重谢..
就是 两个 DropDownList 联动的问题,1.我希望 实现 客户端联动 也就是不希望它联动闪烁.
2.后台获得 DropDownList 选中的值,插入数据库.
3.查询数据库 然后把 查到的值 如:北京市 朝阳区 绑定到 这两个DropDownList 上也就是 一个页面 Page_Load 显示用户信息 Button事件 修改用户信息.
看起来和简单,但做起来总是有好多问题,希望大家能给出 详细解决办法,,一定重谢..
解决方案 »
- ——有关数据库的问题!!!—— 在线等!!!
- 客户端请求页面时,网站的哪些文件是下载到客户端的,保存在哪里?
- entity framework删除外键表中数据
- 关于验证码的问题:打开页面后,第一次登陆,验证码总是错误!!第二次就正确了!!怎么解决??
- 关于datagrid中删除checkbox被选中项的问题
- 求水晶报表导出excel的代码~~~~~~~~~~
- 请问怎么样实现www.58.com顶部效果?点那个那个背景就变白?
- 怎么样用asp.net写语句修改表的结构,也就是数据定义语言???
- 我创建了框架集网页a.htm后,想把b.aspx(逻辑实现在b.aspx.cs中)添加进来,为什么会出错?
- 在treeview中 如何获得节点的 父节点
- 这些代码在ASP.NET里面怎么使用????
- Request.Url 无法读取当前页面地址中的中文参数,怎么办?
另外, 如果用到AJAX组件的, 我感觉特麻烦, 总是出现莫明其秒的错误, 自己手写AJAX.....是好, 但不会~~~~
然后把两个dropdownlist放进去
之后再把一个scriptmangae控件拉过来 放在页面头部
就ok了 什么都不用写
但是 省份城市的代码要写
var DWCityObj = null;//pid 国家代码
//dwCityObj 城市的下拉列表对象function GetCitys(pid,dwCityObj)
{
var url = "../public/AjaxGetCitys.aspx";
var pars = "PID=" + escape(pid);
DWCityObj = dwCityObj;
try
{
var myAjax = new Ajax.Request(
url,
{
method: 'get',
parameters: pars,
onComplete: GetReturnXml,
onSuccess:GetSuccess,
onFailure:GetFailure
});
};
catch(ex)
{
alert(ex.message)
}
}function ClearDwCity()
{
var ops = $A(DWCityObj.getElementsByTagName("option"));
ops.each(function(op){
op.removeNode(true);
})
}//成功
function GetReturnXml(originalRequest)
{
//debugger;
ClearDwCity();
var xmlDoc = GetXmlObj("<Root>" + originalRequest.responseText + "</Root>");
var objNodes = $A(xmlDoc.selectNodes("//City"));
objNodes.each(function(objNode){
var oOption = document.createElement("OPTION");
DWCityObj.options.add(oOption);
oOption.innerText = objNode.selectSingleNode("Name").text;
oOption.value = objNode.selectSingleNode("ID").text;;
})
}//完成
function GetSuccess()
{
}//出错
function GetFailure()
{
alert("Failure to search information!");
return false;
}后台:protected void Page_Load(object sender, EventArgs e)
{
IList<CityInfo> lts = new City().GetEnglishCitys(Request["PID"]);
string xml = "<Citys>";
for (int i = 0; i < lts.Count; i++)
{
xml += "<City>";
xml += "<Name>" + lts[i].CityName + "</Name>";
xml += "<ID>" + lts[i].CityName + "</ID>";
xml += "</City>";
}
xml += "</Citys>";
Response.Write(xml);
}
虽然前台可以 显示出来 但是 当你选中它 的时候 其实 它什么 都不是 更本就不是列表里的值 所以当你这样做的时候 DropDownList2 里就会有两个 朝阳区,,我该 怎么做 大家快给点 具体的 代码吧 一定重谢. 不信没人能解决.
--------------------------------------------------------------------
用客户端的回调。前提是你要熟悉:Js
需要牺牲一个页面来实现2级联动,如果是3级就2个页面.
牺牲的页面代码:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text;
using System.Xml;public partial class Address_DDL : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (this.Request["state"] != null)
{
string state = Server.UrlDecode(this.Request["state"].ToString());
SqlConnection conn = DB.conCreate();
SqlDataAdapter da = new SqlDataAdapter("select [City] from [Postage] where ([Provinces] = @Provinces) GROUP BY [City] ORDER BY MAX([ID]) ASC", conn);
SqlParameter province=da.SelectCommand.Parameters.Add("@Provinces",SqlDbType.NVarChar);
province.Value=state.Trim();
DataSet ds = new DataSet("smallclass");
da.Fill(ds);
XmlTextWriter writer = new XmlTextWriter(Response.OutputStream, Response.ContentEncoding);
//XmlTextWriter writer = new XmlTextWriter("c:/177.txt", Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
writer.IndentChar = ' ';
ds.WriteXml(writer);
writer.Flush();
Response.End();
writer.Close();
}
}
}
-----------------------------------------显示页面加如下面的JS代码
-------------------------
<script language="javascript" type="text/javascript">
function load(state){
var drp2 = document.getElementById("ddlCity");
for(var i = drp2.options.length-1;i>=0;i--)
{
drp2.remove(i);
}
var oHttpReq = new ActiveXObject("MSXML2.XMLHTTP");
var oDoc = new ActiveXObject("MSXML2.DOMDocument");
oHttpReq.open("POST", "Address_DDL.aspx?state="+escape(state), false);
oHttpReq.send("");
var result = oHttpReq.responseText; oDoc.loadXML(result);
var items = oDoc.selectNodes("//smallclass/Table/City");
for (var i = 0;i<items.length;i++)
{
var newOption = document.createElement("OPTION");
newOption.text = items[i].text;
newOption.value = items[i].text;
drp2.options.add(newOption);
}
</script>
{
Ajax.Utility.RegisterTypeForAjax(typeof(WebForm_Food_FoodGame));
}[Ajax.AjaxMethod()]
public string BallotSAdd(int ID)
{
GamesFood nmm_GamesFood = new GamesFood();
GamesFoodInfo OGamesFoodInfo = nmm_GamesFood.GetGamesFoodInfoByFoodGameID(ID);
int ticketnum = OGamesFoodInfo.Ticket + 1;
if (new Com.Netmarch.BLL.GamesFood().UpdateTicket(ticketnum,ID) != null)
{
return "true";
}
else
{
return "false";
}
}function CheckFrom(num)
{
var returnInfo = WebForm_Food_FoodGame.HaveUser().value;
if (returnInfo == "true")
{
alert('对不起,您还没有登陆');
return false;
}
var returnInfor = WebForm_Food_FoodGame.BallotSAdd(num).value;
if (returnInfor == "true")
{
alert("投票成功");
}
if (returnInfor == "false")
{
alert("投票失败");
return false;
}
}
http://blog.csdn.net/dotnetWalker
要想用其他方法,可以看看Icallbackeventhandler的例子。
用的时候直接到 Session中去读取!
http://www.sosuo8.com/article/show.asp?id=891
取数据可以放到一个空页面里面处理(即使是多个dropdownlist都只用放到一个空页面处理)callback需要用到4个函数,前后端各2个一个接一个收服务器端的两个,RaiseCallbackEvent是收,GetCallbackResult是发
Public Function GetCallbackResult() As String Implements System.Web.UI.ICallbackEventHandler.GetCallbackResult
End FunctionPublic Sub RaiseCallbackEvent(ByVal eventArgument As String) Implements System.Web.UI.ICallbackEventHandler.RaiseCallbackEvent
End Sub//这个函数是向客户端注册用于发送的js函数
Private Sub RegisterScript()
Dim sCallBackScript As String
Dim Script As StringBuilder
Script = New StringBuilder() //注册js的接收函数
sCallBackScript = Page.ClientScript.GetCallbackEventReference(Me, "CallStr", "ReceiveFromServer", "null", True) //注册js的发送函数,在客户端直接用CallServer(string)就可以了
Script.AppendLine("<SCRIPT language='javascript' id='js_" & Me.ID & "'>")
'---------------------Send dat to server -------------------------------------------------
Script.AppendLine(" function Callserver(Str)")
Script.AppendLine(" {")
Script.AppendLine(" var CallStr = Str;")
Script.AppendLine(" " & sCallBackScript & ";")
Script.AppendLine(" }")
Script.AppendLine("</SCRIPT>") If Script.ToString <> "" Then Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "js_" + Me.ID, Script.ToString(), False)
End Sub//这个是在客户端用于接受的函数
function ReceiveFromServer(RcvMsg) // recieve infomation from server as a string
{}当然,页面需要实现ICallbackEventHandler类
最后,因为客户端和服务器端接收和发送的都是字符串,所以需要自己解析,这个就需要自己定义好规则了(我建议你使用特殊字符,可以通过ASCII转)