应聘.Net MVC 职位面试问题概括

  • A+
所属分类:C#.NET 编程技术

什么是MVC (模型 视图 控制器)?

MVC是一个架构模式,它分离了表现与交互。它被分为三个核心部件:模型、视图、控制器。下面是每一个部件的分工:

  • 视图是用户看到并与之交互的界面。
  • 模型表示业务数据,并提供数据给视图。
  • 控制器接受用户的输入并调用模型和视图去完成用户的需求。

应聘.Net MVC 职位面试问题概括

      图: MVC (模型、视图、控制器)

你能解释下MVC的完整流程吗?

下面是MVC(模型、视图、控制器)架构的控制流程:

  • 所有的终端用户请求被发送到控制器。
  • 控制器依赖请求去选择加载哪个模型,并把模型附加到对应的视图。
  • 附加了模型数据的最终视图做为响应发送给终端用户。

MVC同时适用于Windows应用和Web应用吗?

相比Windows应用,MVC架构更适用于Web应用。对于Windows应用,MVP(Model View Presenter )架构更好一点。如果你使用WPF和Silverlight,MVVM更适合。

使用MVC有哪些好处?

MVC有两个大的好处:

  • 分离了关注点。后台代码被移到单独的类文件,我们可以最大限度的重复利用代码。
  • 自动化UI测试成为可能,因为后台代码移到了.NET类。这让我们更容易做单元测试和自动化测试。

MVC不同于三层架构?

MVC是三层传统架构的演变。三层架构和MVC有一些通用的组成部分。 显示如下:

功能性 三层 / 分层架构 Model view controller architecture
显示与交互 用户界面 视图
UI逻辑 用户界面 控制器
商业逻辑 / 验证 中间层 模型
请求首先发送给谁? 用户界面 控制器
访问数据 数据链接层 数据链接层
     应聘.Net MVC 职位面试问题概括
图示: 三层架构

MVC的最新版本是哪个?

在写这篇文章时MVC已经发行了4个版本:MVC 1 , MVC 2, MVC 3, 和 MVC 4. 所以 MVC 4是最新版本。

每个版本的MVC有什么不同?

下面的表格列出了详细的不同点。但是在面试中限于时间问题,很难去说出所有的东西。所以,我标出了所有重要区别。

MVC 2 MVC 3 MVC 4
  • Client-side validation
  • Templated Helpers Areas
  • Asynchronous Controllers
  • Html.ValidationSummary  Helper Method
  • DefaultValueAttribute  in Action-Method
  • Parameters binding
  • Binary data with Model Binders
  • DataAnnotations Attributes
  • Model-Validator Providers
  • New  RequireHttpsAttribute Action Filter
  • Templated Helpers
  • Display Model-Level Errors
  • Razor
  • Readymade project templates
  • HTML 5 enabled templates
  • Support for Multiple View Engines, JavaScript, and AJAX
  • Model Validation Improvements
  • ASP.NET Web API
  • Refreshed and modernized default project templates. New mobile project template.
  • Many new features to support mobile apps

MVC中的HTML helpers是什么?

HTML helpers帮助你渲染视图中的HTML控件。如果在面试中你想展示HTML输入框,下面是HTML helper代码。

<%= Html.TextBox("LastName") %>

checkbox的代码如下。用这种方式我们可以创建现存的所有HTML控件。

<%= Html.CheckBox("Married") %>

“HTML.TextBox” 和 “HTML.TextBoxFor”有什么不同?

它们两个输出相同的HTML, “HTML.TextBoxFor”是强类型的,但 “HTML.TextBox”不是。下面是一个实例,它仅仅创建了一个名字为 “CustomerCode”的输入框。

Html.TextBox("CustomerCode")

下面的代码是用 “Html.TextBoxFor” 创建的HTML输入框,从对象"m"中调用了属性”CustomerCode “。

Html.TextBoxFor(m => m.CustomerCode)

相同的方式,我们可以用“Html.CheckBox” 和 “Html.CheckBoxFor”创建checkbox。

MVC的路由选择是什么?

路由选择功能帮你定义一个URL规则,映射URL到控制器。

举一个例子,我们想让用户输入“ http://localhost/View/ViewCustomer/ ”时,它转向到“Customer”控制器并且调用 DisplayCustomer 。这个通过Maproute方法来定义。代码如下:

routes.MapRoute(
               "View", // Route name
               "View/ViewCustomer/{id}", // URL with parameters
               new { controller = "Customer", action = "DisplayCustomer", 
id = UrlParameter.Optional }); // Parameter defaults

在哪里写路由映射表?

在 “ global.asax ” 文件。

我们可以映射多个URL到同一个动作吗?

是的,可以。只需要添加多条不同Key名字的记录,并且指定同样的控制器和动作。

使用hyperlink生成链接,如何从一个视图链接到另一个视图?

使用 ActionLink 方法,如下图所示。下面的代码生成一个简单的URL,链接到"Home"控制器的GotoHome动作。

<%= Html.ActionLink("Home","Gotohome") %>

如何限制一个动作的类型为GET或POST?

我们可以给MVC的动作一个HttpGet或HttpPost属性去限制HTTP的类型。你可以看下面的代码段,这个 DisplayCustomer 动作只能用HttpGet方式访问。如果我们尝试用Http post的方式,会看到错误信息。

[HttpGet]
public ViewResult DisplayCustomer(int id)
{
    Customer objCustomer = Customers[id];
    return View("DisplayCustomer",objCustomer);
}

在MVC中如何保持Sessions?

可以通过三种方式保持: tempdata, viewdata, 和viewbag。

tempdata, viewdata, 和 viewbag之间有什么不同?

应聘.Net MVC 职位面试问题概括

图示:  tempdata, viewdata, 和viewbag之间不同点
  • Temp data  -在不同的控制器或动作间转换时保持数据。另外,进行页面转向时,tempdata可以保持数据。它是一个内部的Session变量。
  • View data  - 可以在控制器和视图间保持数据。
  • View Bag  -  它是视图数据的动态包装。使用Viewbag不需要类型转换。它使用的是内部动态关健词。

应聘.Net MVC 职位面试问题概括

图示: 动态关键词
  • Session 变量 -  使用Session变量可以在任何实体间保持数据。
  • 隐藏字段和HTML控件 -  只能何持数据从UI到Controller。可以使用HTML控制器或隐藏字段,用HTTP方式(POST或GET)发送数据到控制器。

下表是汇总:

Maintains data between ViewData/ViewBag TempData Hidden fields Session
Controller to Controller No Yes No Yes
Controller to View Yes No No Yes
View to Controller No No Yes Yes

MVC是的局部视图是什么?

局部视图是一个可重复调用的视图(和用户控件一样),它可以嵌入到视图里面。例如:你的站点页面有统一的菜单、头部、尾部,如下图所示:

应聘.Net MVC 职位面试问题概括

Figure: MVC中的局部视图

如果你想在所有页面重用菜单、头部和尾部。可以创建局部视图,然后在主视图中调用它们。

如何创建和调用局部视图?

点击"Create partial view "复选框去添加局部视图。

应聘.Net MVC 职位面试问题概括

图示: 创建局部视图

局部视图创建好后,在主视图中使用 Html.RenderPartial 调用。如下代码:

<body>
<div>
<% Html.RenderPartial("MyView"); %>
</div>
</body>

MVC中如何做输入验证?

早期的MVC版本中使用数据注释来做验证。除了注释还可以利用数据模型的属性标签。例如,下面的实例代码中Customer类有一个属性customercode。

这个CustomerCode属性标注了一个Required数据。如果不提供CustomerCode数据,它将不能通过验证。

public class Customer
{
    [Required(ErrorMessage="Customer code is required")]
    public string CustomerCode
    {
        set;
        get;
    } 
}

为了显示验证错误提示我们需要使用ValidateMessageFor方法,它属于Html helper类。

<% using (Html.BeginForm("PostCustomer", "Home", FormMethod.Post))
{ %>
<%=Html.TextBoxFor(m => m.CustomerCode)%>
<%=Html.ValidationMessageFor(m => m.CustomerCode)%>
<input type="submit" value="Submit customer data" />
<%}%>

在controller中,使用ModelState.IsValid属性检查数据是否正确。

public ActionResult PostCustomer(Customer obj)
{
    if (ModelState.IsValid)
    {
        obj.Save();
        return View("Thanks");
    }
    else
    {
        return View("Customer");
    }
}

下面是一个显示错误信息的实例。

应聘.Net MVC 职位面试问题概括

图示: MVC中的验证

可以一次显示所有的错误信息吗?

可以。使用Html helper类中的ValidationSummary方法。

<%= Html.ValidationSummary() %>

MVC中还有哪些注释属性用来验证?

如果你要去检查字符的长度,你可以使用 StringLength .

[StringLength(160)]
public string FirstName { get; set; }

如果你想使用注册表达式,你可以使用 RegularExpression

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}")]public string Email { get; set; }

如果你想检查数字是否在一个范围内,你可以使用 Range

[Range(10,25)]public int Age { get; set; }

有时你想比较两个字段的值,我们可以使用 Compare

public string Password { get; set; }[Compare("Password")]public string ConfirmPass { get; set; }

如果你想拿到错误详情,你可以使用 Errors 集合。

var ErrMessage = ModelState["Email"].Errors[0].ErrorMessage;

如果你已经创建好模型对象,你可以在Contronller中调用 TryUpdateModel 去检查它是否正确。

TryUpdateModel(NewCustomer);

如果你想在Controller中添加错误信息,你可以使用 AddModelError 函数。

ModelState.AddModelError("FirstName", "This is my server-side error.");

如何启用客户端验证?

有两个步骤:第一引用必须的jQuery文件。

<script src="<%= Url.Content("~/Scripts/jquery-1.5.1.js") %>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/jquery.validate.js") %>" type="text/javascript"></script>
<script src="<%= Url.Content("~/Scripts/jquery.validate.unobtrusive.js") %>" type="text/javascript"></script>

第二步去调用 EnableClientValidation 方法。

<% Html.EnableClientValidation(); %>

什么是MVC中的Razor?

它是一个轻量级的视图引擎。MVC最初只有一个ASPX的视图类型,直到MVC3才引进了Razor 。

已经有了ASPX,为什么还要Razor?

相比ASPX,Razor是一个干净的、轻量级的和语法更简单。例如,ASPX去显示时间:

<%=DateTime.Now%>

在Razor中,只需要一行:

@DateTime.Now

Razor or ASPX,哪个更好?

Razor更好,因为它是轻量级的,并且语法简单。

在MVC中如何做授权和认证?

在MVC中你可以使用Windows或Forms认证。

在MVC中如何去执行Windows认证?

你需要修改web.config文件,并设置验证模式为Windows。

<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
</authorization>

然后在controlle或action中,你可以使用 Authorize 属性,指定哪个用户可以访问这个controller或action。下面的代码设置到只有指定的用户可以访问它。

[Authorize(Users= @"WIN-3LI600MWLQN\Administrator")]
public class StartController : Controller
{
    //
    // GET: /Start/
    [Authorize(Users = @"WIN-3LI600MWLQN\Administrator")]
    public ActionResult Index()
    {
        return View("MyView");
    }
}
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: