一.单选题(切记:在题号左边的括弧中,填写正确的字母选项.共30分,每题2分):
( D )1.在MVC世界中,有个重要的概念Dry,其意思是:
A.写代码要有规范. B.写代码要有适合的框架. C.关注点要分离. D.不要重复你自己.
( C )2.在MVC世界中,有个重要的概念SoC,其意思是:
A.以习惯替换配置. B.不要重复你自己. C.关注点分离. D.写代码要有适合的框架.
( A )3.在MVC世界中,有个重要的概念CoC,其意思是:
A.以习惯替换配置. B.测试驱动. C.关注点分离. D.写代码要有适合的框架.
( D)4.在MVC世界中,有个重要的概念ORM,其意思是:
A.以习惯替换配置. B.实体框架模型. C.关注点分离. D.对象关系映射.
( A )5.如果定义了一个可供网址直接访问Action,其名称是:Add(int First,int Second),那么URL访问形式为:
A.http://localhost:2180/Home/Add?First=1&Second=2
B.http://localhost:2180/Home/Add(1,2)
C.http://localhost:2180/Home/Add(First,Second)?First=1&Second=2
D.以上写法都不对.
( A )6.我们采用Entity Framework支持的Code First开发模式时,需要先建立数据库,然后再进行其它的开发.
A.错误. B.正确.
( D )7.在Models目录下,创建一个类文件,需要声明主键,以下说法错误的是:
A.方法1把相应的Property名称写成为Id,型别为int.
B.方法2把相应的Property名称写成为StudentId,型别为int.
C.方法3在相应的Property上加一个Key Attrubute
D.以上都错.
( A )8.在Models目录下,创建一个类文件,需要声明字段长度,以下说法正确的是:
A.在相应的Property上加一个MaxLength Attrubute.
B.在相应的Property上加一个Required Attrubute.
C.在相应的Property上加一个Key Attrubute.
D.以上都错.
( B )9.在Models目录下,创建一个类文件,如果希望把某Property声明为DateTime类型,在数据库表格里的相应字段设置为允许NULL的话,那么我们可以在该Property的类型声明后,加上一个问号.
A.错误.B.正确.
( C )10.在Models目录下,创建一个类文件,在某个Property上加一个NotMapperd Attribute,其目的是:
A.禁止用户通过URL直接访问此Property.
B.允许用户通过URL直接访问此Property.
C.把此Property排除在Entity Framework自动对应的数据库表格字段之外.
D.把此Property包含在Entity Framework自动对应的数据库表格字段之内.
( A )11.在Models目录下,创建一个类文件,有以下代码:
Public virtual Teacher Teacher{get;set;}
关于virtual关键字,说法正确的是:
A.可启用”延迟装入”特性. B.关闭”延迟装入”特性.
( B )12.Code First中的数据库迁移技术(DB Migration),其作用是:
A.可以升级调整数据库架构, 但不允许恢复到旧版数据库.
B.调整数据库架构时,任然保留现有的数据库数据.
( B)13.在控制器中的Action前面加一个NonAction属性,其目的是禁止该Action发布到Web上.
A.错误. B.正确
( C )14.判断模型绑定的验证结果,可以通过以下哪个对象进行判断?:
A.Model. B.State. C.ModelState. D.Session
( C )15.我们在开发Asp.Net MVC时,有一个口头禅:
A.Model要轻,Controller要重,View要笨.
B.Model要重,Controller要笨,View要轻.
C.Model要重,Controller要轻,View要笨.
二.阅读曾经的上机代码,回答问题(30分):
1.部分代码:
HomeControllers.cs部分内容:
[HttpPost]
public ActionResult DynamicOutput(stringRowNum)
{
int iRowNum=0;
if (int.TryParse(RowNum, out iRowNum) ==false)
{
ViewBag.Err = "IntTryErr";
return View("Err");
}
if (iRowNum < 0)
{
ViewBag.Err = "RowNum < 0";
return View("Err");
}
ViewBag.RowNum = iRowNum;
return View();
}
DynamicOutput.cshtml部分内容:
@{ int iRowNum = (int)ViewBag.RowNum;}
<table width="400" border="1" align="center">
<caption>学生花名册</caption>
<thead style="color:#000080;background-color:#BFBFFF">
<tr>
<th>编 号</th>
<th>姓 名</th>
<th>年 龄</th>
</tr>
</thead>
<tbody>
@{
for(int i=0;i<iRowNum;i++)
{
<tr>
<td>@(i+1)</td>
<td> </td>
<td> </td>
</tr>
}
}
</tbody>
</table>
简答上述代码含义:
根据输入的行数,动态产生网页内容,内容为一个学生花名册表格,表格行数与输入的行数相关.如果输入值错误或者为负数,显示相应的错误提示页面.
2.部分代码:
Global.asax.cs文件中的部分代码:
protected void Application_Start()
{
Application["OnLineUserCount"] =0;
……
}
protected void Session_Start(object sender,EventArgs e)
{
Application.Lock();
Application["OnLineUserCount"] =Convert.ToInt32(Application["OnLineUserCount"]) + 1;
Application.UnLock();
}
protected void Session_End(object sender,EventArgs e)
{
Application.Lock();
Application["OnLineUserCount"] =Convert.ToInt32(Application["OnLineUserCount"]) - 1;
Application.UnLock();
}
简答上述代码含义:
网站初始启动时,在线人数初始值为0
每登录一个用户,在线人数加1,每注销一个用户,在线人数减1.
3.部分代码:
public class RouteConfig
{
public static voidRegisterRoutes(RouteCollection routes)
{
routes.MapRoute(
name: "ForbidDownloadRar",
url:"Content/Download/a/b/c/{id}.rar",
defaults: new { controller ="Home", action = "ForbidDownloadRar" }
);
routes.MapRoute(
name: "ForgeHtml",
url: "china/htzd/{id}.html",
defaults: new { controller ="Home", action = "Index", id = UrlParameter.Optional },
///路由值得添加约束
constraints: new {id=@"\d+" }
);
}
}
简答上述代码含义:
创建了2个路由映射:
第一个名称叫ForbidDownloadRar,假设通过http://localhost:2020/ Content/Download/a/b/c/xxx.rar,访问时,自动切换到http://localhost:2020/Home ForbidDownloadRar/ 显示[禁止下载]提示页面.第二个名称叫ForgeHtml,假设通过http://localhost:2020/ "china/htzd/8.html 访问时,显示http://localhost:2020/Home/Index页面内容。通过此方法可模拟静态页面,此伪静态页面扩展名是html,文件名约束为数值.
4.部分代码:
public ActionResult Search(string Name,int?Age)
{
int age ;
age = Age??-1;
if (string.IsNullOrEmpty(Name) != true&& string.IsNullOrWhiteSpace(Name) != true)
{
var students = db.Students;
if (age == -1)
{
varresults = students.Where(m => m.Name == Name).OrderByDescending(m =>m.Age).ThenBy(m=>m.Name);
return View(results.ToList());
}
else
{
var results = students.Where(m => m.Name== Name).Where(m=>m.Age==age).OrderBy(m => m.Age);
return View(results.ToList());
}
}
ViewBag.Tip = "Name不能为空。";
return View("Index");
}
简答上述代码含义:
如果用户只输入的学生名称,搜索数据库后,显示符合要求的学生名单.最终结果,按照年龄的递减顺序,姓名的递增顺序排列;如果用户输入的学生名称,并且输入了年龄,搜素数据库后,按照年龄的递增顺序排序。
5.部分代码:
public class MyAuthorizeAttribute :AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
return DateTime.Now.Minute % 2 == 0;
}
protected override void HandleUnauthorizedRequest(AuthorizationContextfilterContext)
{
filterContext.HttpContext.Response.Redirect("/Home/ShowTip");
}
}
简答上述代码含义:
自定义了一个权限过滤器,时间分钟数为偶数时,满足要求。如果权限不满足要求时,会切换到提示页面。
三.简答题(40分):
1.MVC让软件开发的过程大致切割成哪三个主要单元?分别有什么作用?(9分)
2.采用Entity Framework或其它ORM开发技术,有哪三种开发模式?(9分)
3.从Controller取得数据后,可以传递给View.请说出几种传递方法。(7分)
4. 在MVC平台,网页设计TextBox控件时,编辑代码有四种形式,以下已经写出了第一种,请写出后三种.(8分)
@using MvcViewModelTest.Models
@model AllPersons
<h2>第1种: <input id="tea_Name" name="tea.Name" type="text" value="马老师" /> <h2>
<h2>第2种: @Html.TextBox("tea.Name", Model.tea.Name)</h2>
<h2>第3种: @Html.TextBoxFor(m => m.tea.Name)</h2>
<h2>第4种: @Html.EditorFor(m => m.tea.Name)</h2>
5.什么是Ajax技术?在使用Ajax辅助方法之前,必须要先在页面中载入哪些文件才能正常执行?(7分)