php dropdownlist,下拉列表多级联动dropDownList示例代码

视图:

cdnauto/views/config/index.php

echo CHtml::dropDownList('node', '', CHtml::listData(Node::model()->findAll(),'name','name'),array('empty'=>'--请选择节点--',

'id' => 'node',

'ajax'=>array(

'type'=>'POST',

'url'=>Yii::app()->createUrl('cdnauto/config/getNodeServersByNodeName'),

'update'=>'#servers',

'data'=>array('node_name'=>'js:$("#node").val()'),

)

)

);

echo "        ";

echo CHtml::dropDownList('servers', '', array('--请选择服务器--'));

控制器:

cdnauto/controllers/ConfigController.php

public function actionGetNodeServersByNodeName(){

// if(!Yii::app()->request->isAjaxRequest)

// throw new CHttpException(404);

$node_name = $_POST['node_name'];

$nodeid = Node::model()->getNodeId($_POST['node_name']); //通过节点名称获取该节点ID

$server = GossServer::model()->getServerByNodeid($nodeid); //通过节点ID获取服务器信息

//$server 为array类型,形如 $server = array(array('name'=>'name1'),array('name'=>'name2'));所以需要两次foreach

if(isset($server)){

foreach ($server as $k=>$v){

foreach($v as $kk => $vv){

echo CHtml::tag('option', array('value'=>$kk), CHtml::encode($vv), true);

}

}

}else{

echo CHtml::tag('option', array('value'=>''), 'servers', true);

}

}

模型:

GossServer.php

/**

* 通过节点ID获取该节点下所有的服务器名称

* @author ysdaniel

*/

public static function getServerByNodeid($nodeid)

{

$sql = "SELECT name FROM OSS_Server WHERE nodeid = '{$nodeid}' ";

///$sql = "SELECT name,nodeid FROM OSS_Server WHERE nodeid = '{$nodeid}' "; //both ok

$cmd = Yii::app()->db->createCommand($sql);

$ret = $cmd->queryAll();

if (!$ret){

throw new Exception("找不到这个节点对应的服务器");

}

return $ret;

}

Node.php

/**

* 通过nodename获取nodeid名

* @author

*/

public static function getNodeId($name)

{

$sql = "SELECT id FROM OSS_Node WHERE name = '{$name}'";

$cmd = Yii::app()->db->createCommand($sql);

$ret = $cmd->queryAll();

if (!$ret){

return null;

//throw new Exception("找不到Node{$name}");

}

return $ret[0]['id'];

}

其它:

数据表结构

效果:

没有选择节点前:

8560a73cffec7df8aab783309fb900e3.gif 

细节有空再补上了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ASP.NET中的DropDownList控件可以通过绑定数据源实现二级联效果。下面是一个使用C#代码实现的示例: 首先,需要在页面上定义两个DropDownList控件,分别表示一级和二级选项: ``` <asp:DropDownList ID="ddlFirstLevel" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlFirstLevel_SelectedIndexChanged"> </asp:DropDownList> <asp:DropDownList ID="ddlSecondLevel" runat="server"> </asp:DropDownList> ``` 在代码后台,我们需要在Page_Load事件中绑定一级选项的数据源,并在一级选项的选中事件中态绑定二级选项的数据源: ``` protected void Page_Load(object sender, EventArgs e) { if(!IsPostBack) { // 绑定一级选项的数据源 ddlFirstLevel.DataSource = GetFirstLevelData(); ddlFirstLevel.DataTextField = "Name"; ddlFirstLevel.DataValueField = "ID"; ddlFirstLevel.DataBind(); // 绑定二级选项的初始数据源 ddlSecondLevel.DataSource = GetSecondLevelData(0); // 初始时显示第一个一级选项的二级选项 ddlSecondLevel.DataTextField = "Name"; ddlSecondLevel.DataValueField = "ID"; ddlSecondLevel.DataBind(); } } protected void ddlFirstLevel_SelectedIndexChanged(object sender, EventArgs e) { // 重新绑定二级选项的数据源,根据选中的一级选项 int firstLevelID = Convert.ToInt32(ddlFirstLevel.SelectedValue); ddlSecondLevel.DataSource = GetSecondLevelData(firstLevelID); ddlSecondLevel.DataTextField = "Name"; ddlSecondLevel.DataValueField = "ID"; ddlSecondLevel.DataBind(); } // 获取一级选项的数据源 private DataTable GetFirstLevelData() { // 从数据库或其他途径获取一级选项的数据源 // 返回的DataTable需要包含ID和Name两列,分别表示一级选项的ID和名称 } // 获取二级选项的数据源 private DataTable GetSecondLevelData(int firstLevelID) { // 根据一级选项的ID查询数据库或其他途径获取相应的二级选项数据源 // 返回的DataTable需要包含ID和Name两列,分别表示二级选项的ID和名称 } ``` 以上代码使用了两个DataTable作为示例的数据源,实际使用时需要根据业务需求自行修改数据源的获取逻辑,并将获取到的数据绑定到DropDownList控件上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值