讲讲怎么在 ASP.NET MVC2中使用用户控件。首先我们新建一个用户控件,
我们命名为SelectGroup.ascx,代码如下
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script language="javascript" type="text/javascript" src="<%=Url.Content("~/Areas/Util/Scripts/SelectGroup.js") %>"></script>
<div>
<table>
<tr>
<td style="text-align:right">
招生批次
</td>
<td>
<select id="admissionBatch" style="width: 150px">
</select>
</td>
<td style="text-align:right; width:80px">
学历层次
</td>
<td>
<select id="edcuationLevel" style="width: 150px">
</select>
</td>
<td style="text-align:right; width:80px">
专业名称
</td>
<td>
<select id="professional" style="width: 150px">
</select>
</td>
</tr>
</table>
</div>
我们再编写其对应的控制器如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace EducationManage.Areas.Util.Controllers
{
using Utility.Json;
using EducationManage.Areas.Util.Models;
public class SelectGroupController : Controller
{
//
// GET: /Util/SelectGroup/
SelectgroupEntities selectgroupEntities = new SelectgroupEntities();
/// <summary>
/// 招生批次
/// 李磊 2010-10-29
/// </summary>
/// <returns></returns>
public JsonResult GetAdmissionBatch()
{
List<SG_Admission_Batchs> admissionBatchsList =selectgroupEntities.admission_batchs.ToList();
return Json(admissionBatchsList, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 学历层次
/// 李磊 2010-10-29
/// </summary>
/// <returns></returns>
public JsonResult GetEducationLevel()
{
List<SG_Education_Levels> educationLevelList = selectgroupEntities.education_levels.ToList();
return Json(educationLevelList, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 专业
/// 李磊 2010-10-29
/// </summary>
/// <returns></returns>
public JsonResult GetProfessional()
{
List<SG_Professional> professionalList = selectgroupEntities.professional.ToList();
return Json(professionalList, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 学籍批次
/// 李磊 2010-10-29
/// </summary>
/// <returns></returns>
public JsonResult GetRollBatch()
{
List<SG_Roll_Batchs> rollBatchList = selectgroupEntities.roll_batchs.ToList();
return Json(rollBatchList, JsonRequestBehavior.AllowGet);
}
/// <summary>
/// 专业学历层次联动
/// 李磊 2010-10-29
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public JsonResult GetProfessionalByEducationLevel(string id)
{
try
{
List<string> professionalIdList = selectgroupEntities.professional_educationlevel.Where(pe => pe.education_id == id).Select(pe => pe.prefessional_code).ToList();
List<SG_Professional> professionalList = selectgroupEntities.professional.Where(p => professionalIdList.Contains(p.prefessional_code)).ToList();
return Json(professionalList, JsonRequestBehavior.AllowGet);
}
catch
{
return null;
}
}
}
}
好的,我们接着编写js.
首先在js的顶层引入 ///<reference path = "../../../Scripts/jQuery-1.4.1.js"/>这样编写js代码就有智能提示,如下
$(document).ready(function () {
$.ajaxSetup({
cache: false
});
$.getJSON("/SelectGroup/GetAdmissionBatch/", function (data) {
$("#admissionBatch").append("<option value=''>请选择</option>");
$.each(data, function (i, item) {
$("<option></option>")
.val(item["admission_batch_id"])
.text(item["name"])
.appendTo($("#admissionBatch"));
});
});
$.getJSON("/SelectGroup/GetEducationLevel/", function (data) {
$("#edcuationLevel").append("<option value=''>请选择</option>");
$.each(data, function (i, item) {
$("<option></option>")
.val(item["education_id"])
.text(item["name"])
.appendTo($("#edcuationLevel"));
});
});
$.getJSON("/SelectGroup/GetProfessional/", function (data) {
$("#professional").append("<option value=''>请选择</option>");
$.each(data, function (i, item) {
$("<option></option>")
.val(item["prefessional_code"])
.text(item["name"])
.appendTo($("#professional"));
});
});
$("#edcuationLevel").change(function () {
$("#professional").empty();
$("#professional").append("<option value='0'>请选择</option>");
$.getJSON("/SelectGroup/GetProfessionalByEducationLevel/" + $("#edcuationLevel").val(), function (data) {
$.each(data, function (i, item) {
$("<option></option>")
.val(item["prefessional_code"])
.text(item["name"])
.appendTo($("#professional"));
});
});
});
})
ok,好了,我们看看在页面怎么引用
<%Html.RenderPartial("~/Areas/Util/Views/Shared/SelectGroup.ascx"); %>
只要你将这段代码放在页面上即可。Html.RenderPartial有很多重载,你也可以给用户控件传递一个需要绑定的对象。说到这里谈谈Html.RenderPartial和Html.Partial的区别。Html.RenderPartial是直接输出至当前HttpContext,而Html.Partial是将视图内容直接生成一个字符串并返回。所以在引用的时候不一样分别为<% Html.RenderPartial("~/Areas/Util/Views/Shared/SelectGroup.ascx"); %>和<%=Html.Partial("~/Areas/Util/Views/Shared/SelectGroup.ascx"); %>。说到这两个不免要说Html.RenderAction,它是通过Controller中的Action来调用用户控件。上面的代码大家可以根据js和控制器代码看到,每个下拉列表的绑定都有自己的控制器返回数据,在页面加载完成的时候去调用自己的控制器获取下拉列表数据。如果我们用Html.RenderAction就没有那么麻烦了,看看控制器代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace EducationManage.Areas.Util.Controllers
{
using Utility.Json;
using EducationManage.Areas.Util.Models;
public class SectionGroupController : Controller
{
//
// GET: /Util/SectionGroup/
SelectgroupEntities selectgroupEntities = new SelectgroupEntities();
public ActionResult Index()
{
List<SG_Admission_Batchs> admissionBatchList = selectgroupEntities.admission_batchs.ToList();
SelectList admissionBatch = new SelectList(admissionBatchList, "admission_batch_id", "name", "");
ViewData.Add("admissionBatch", admissionBatch);
List<SG_Education_Levels> educationLevelList = selectgroupEntities.education_levels.ToList();
SelectList educationLevel = new SelectList(educationLevelList, "education_id", "name", "");
ViewData.Add("educationLevel", educationLevel);
List<SG_Professional> professionalList = selectgroupEntities.professional.ToList();
SelectList professional = new SelectList(professionalList, "prefessional_code", "name", "");
ViewData.Add("professional", professional);
return PartialView("~/Areas/Util/Views/Shared/SectionGroup.ascx");
}
}
}
再看看前台
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<script language="javascript" type="text/javascript" src="<%=Url.Content("~/Areas/Util/Scripts/SelectGroup.js") %>" />
<div>
<table>
<tr>
<td style="text-align: right">
招生批次
</td>
<td>
<%:Html.DropDownList("admissionBatch", ViewData["admissionBatch"] as SelectList, "请选择", new { id = "admissionBatch", style = "width: 150px" })%>
</td>
<td style="text-align: right; width: 80px">
学历层次
</td>
<td>
<%:Html.DropDownList("edcuationLevel", ViewData["educationLevel"] as SelectList, "请选择", new { id = "edcuationLevel", style = "width: 150px" })%>
</td>
<td style="text-align: right; width: 80px">
专业名称
</td>
<td>
<%:Html.DropDownList("professional", ViewData["professional"] as SelectList, "请选择", new { id = "professional", style = "width: 150px" })%>
</td>
</tr>
</table>
</div>
在这里我们一次性就获取到了所有下拉列表要绑定的数据。我们只需要在前台这样应用即可<%Html.RenderAction("Index", "SectionGroup");%>。好了,在MVC2中使用用户控件就是这么简单。
本文出自 “微软技术” 博客,请务必保留此出处http://leelei.blog.51cto.com/856755/412702
- ASP.NET MVC加载用户控件后并获取其内控件值或赋值
有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不 ...
- 在Asp.Net MVC中使用Repeater控件
使用Repeater控件在视图中展示图表信息,Repeater控件的使用概述: <asp:Repeater ID="Repeater1" runat="server ...
- Asp.net 恢复页面内用户控件内的控件ClientID
众所周知在Asp.net中如果一个页面添加了一个用户控件(或母版页),那么用户控件内的控件的 ClientID号会被自动添加页面中用户控件的ClientID 即页面中的控件内的控件ClientID ...
- 在VisualStudio 工具箱中隐藏用户控件
当我们创建一个用户控件后,VisualStudio会自动将其添加到工具箱中,本来这是一个比较贴心的设计.但是,有的时候,我们并不想将用户控件放到工具箱中. 例如:在WPF中,为了避免一个页面的控件过多 ...
- 如何在Web.config中注册用户控件和自定义控件
问题: 在ASP.NET 的早先版本里,开发人员通过在页面的顶部添加 指令来引入和使用自定义服务器控件和用户控件时,象这样: <%@ Register TagPrefix="scott ...
- C# WinForm中添加用户控件
转:https://blog.csdn.net/haelang/article/details/40681003 有的时候我们需要频繁使用一些系统默认工具的组合,那么就可以使用自定义用户控件. 起一个 ...
- C# winform中自定义用户控件 然后在页面中调用用户控件的事件
下面是用户控件的代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...
- C#中,用户控件UserControl里面用Panl加载UserControl,并实现利用委托互相传值
用户控件主窗体结构:左侧树形菜单,右侧Panl: 根据点击的菜单节点,panl里面选择性加载某一个子窗体用户控件,并传值给子窗体: 反之,在子窗体进行相应的操作之后,传值给主窗体,触发主窗体的刷新. ...
- ASP.NET动态加载用户控件的方法
方法是使用LoadControl方法,根据用户控件的相对路径,动态生成用户控件对象 用户控件 public class UserControlA :UserControl { public UserC ...
随机推荐
- Mysql主从架构报错-Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work...
在搭建Mysql主从架构过程中,由于从服务器是克隆的主服务器系统,导致主从mysql uuid相同, Slave_IO无法启动,报错如下: The slave I/O thread stops bec ...
- [pixhawk笔记]8-半物理仿真环境
通过半物理仿真,可以在不试飞的情况下对飞控的软硬件进行部分验证,下面结合文档对半物理仿真环境的搭建和运行进行学习.先跑起来再说. Pixhawk支持多轴和固定翼的仿真,多轴用jMavSim,固定翼用X ...
- PostgreSQL 递归查询 (转)
数据库中的数据存在父子关系(单继承,每一条记录只有一个父亲). 如果要查询一条记录以及他的所有子记录,或者要查询一条记录以及他的所有父记录.那么递归查询就再合适不过了.可以简化复杂的SQL语句 现在 ...
- [翻译]纠正PostCSS的4大认识误区
市面上已经有很多的前端工具,再来引入新的前端工具,价值大不大?这主要取决于,它是否给开发人员提供了新的功能,是否值得花时间和精力去学习和使用? PostCSS出现时有一个很有趣的现象.像sass和le ...
- [BZOJ4653 区间]
Description 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x ...
- JAVA基础补漏--SET
HashSet: 1.无序集合. 2.底层是一个哈希表结构,查询速速很快. 哈希表==数据 + 链表/红黑树 特点:查询速度快. 存储数据到SET中: 1.计算数据的HASH值. 2.查看有没有相同H ...
- Linux 下部署Django项目
Linux 下部署Django项目 说明:本文所使用的环境为CentOS 6+Python2.7+Django1.11 安装Django.Nginx和uWSGI 1.确定已经安装了2.7版本的Py ...
- HDU1698 just a Hook - 带有lazy标记的线段树
2017-08-30 16:44:33 writer:pprp 上午刚刚复习了一下不带有lazy标记的线段树, 下午开始学带有lazy标记的线段树 这个是我看大佬代码敲的,但是出了很多问题, 这提醒我 ...
- windows系统下简单node.js环境配置 安装
国内目前关注最高,维护最好的一个关于nodejs的网站应该是http://www.cnodejs.org/ windows系统下简单nodejs环境配置. 第一步:下载安装文件 下载地址:官网 htt ...
- SpringBoot中使用log4j日志
一:引入jar包 使用SpringBoot创建项目的时候,pom文件引入了spring-boot-starter,其中包含了spring-boot-starter-logging,该依赖内容就是Spr ...