ASP.NET MVC 中使用用户控件——转

讲讲怎么在
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 中使用用户控件——转

时间: 2024-10-09 11:04:04

ASP.NET MVC 中使用用户控件——转的相关文章

ASP.NET MVC加载用户控件后并获取其内控件值或赋值

有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不想在控件制器内进行赋值,而是想在视图中使用jQuery来获取用户控件内的控件值或是为它们赋值.那需要怎样来做呢? 下面Insus.NET花上少少时间,做个简单的例子,演示与分享实现的方法. 实现之前,先修改一下AscxUtility.cs这个类中的 public static HtmlString Rende

Asp.net 恢复页面内用户控件内的控件ClientID

众所周知在Asp.net中如果一个页面添加了一个用户控件(或母版页),那么用户控件内的控件的   ClientID号会被自动添加页面中用户控件的ClientID 即页面中的控件内的控件ClientID=用户控件id号+"_"+用户控件内控件的id号 说的太绕了,还是看下例子吧 在一个asp.net页面index.aspx中添加了一个head.ascx用户控件id号为"head1" head.ascx控件中有一个input#hid_name控件 那么index.asp

ASP.NET动态加载用户控件的方法

方法是使用LoadControl方法,根据用户控件的相对路径,动态生成用户控件对象 用户控件 public class UserControlA :UserControl { public UserControlA(string name) { //TODO } } 需要动态生成控件的地方 string ucPath = "../UserControls/UserControlA.ascx"; UserControlA ca = Page.LoadControl(ucPath) as

asp.net 开发过程中关于image控件中图片点击后地址乱码的问题

前台页面是这样的: <%-- 图片展示20140705add --%>    <div id="imgShowDiv" style="left:550px; top:90px; height:430px; display:none;" class="msgboxStyle">        <h1 onmousedown="startDrag(this)" onmousemove="dr

Windows Phone 8.1中自定义用户控件及如何调用用户控件

对于有些强迫症的我,还是作为程序员,在自己编程的世界里,凡事都要按照自己的意愿来安排布局或者设计动画等 等.虽说微软已经给我们封装了太多太多的控件和模板,但是难免有时候不会符合我们的意愿和要求,在这个时候就 需要我们自己来设计用户自定义控件. 首先需要在VS中创建自定义控件,所以需要在项目名右击->添加->新建项->选择User Control(用户控件)->添加 结合之前一篇提及到的XAML语法和开头的定义的说明,这边借自定义用户控件和引用自定义控件进一步说明. 之前博客中见到X

Winform中使用用户控件实现带行数和标尺的RichTextBox(附代码下载)

场景 RichTextBox控件允许用户输入和编辑文本的同时提供了比普通的TextBox控件更高级的格式特征. 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个用户控件GuageRichTextBox. 编辑用户控件,相当于自己定义了一个控件,和其他控件一样在窗体中使用,是一个类. 然后打开其设计页面,放置一个RichTextBox 然后进入其代码 usi

Asp.Net(c#)中使用ReportViewer控件制作报表

环境:VS2010 1.新建一个Default.aspx文件,把ReportViewer1控件和ScriptManager1拖到页面上. (1).从ReportViewer1控件的任务栏中选择设计新报表,出现”报表向导“对话框. 依次设置如下: “数据集属性”,选择或设置数据集. “排列字段”,将相应字段拖放到行组.列组.值字段对应的框中.? “选择布局”,根据需要需要选择相应布局.? “选择样式”,选择喜欢的样式,完成报表向导. (2).把ReportViewer1控件的选择报表选为Repor

winform 中调用用户控件中 嵌套用户控件的事件

工作了很久,一直没有很深入的了解C#中的委托和事件. 来到新公司,主要的工作就是使用委托和事件操作数据.一下子不知道该如何下手.各方请教大神,得出下面的方法 1. 在A控件中定义一个事件,B控件触发的时候,调用一下这个事件.然后再在A的父级控件中写方法,+=的方式把方法委托给A的事件就行了 窗体: private void Form1_Load(object sender, EventArgs e)        {            UC_Content content = new UC_

ASP.NET MVC中加载WebForms用户控件(.ascx)

原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为“上一月”.“下一月”的链接生成"__doPostBack()"的js调用,如下图: 目前发现它会带来两个问题: 1. 不支持IE10: 2. 某些电脑不允许执行__doPostBack. 问题提炼 前提: 我们想以最低的成本解决这个问题,也就是对当前代码尽可