Learn Mvc

1,实现一个 Public 的非 Action 方法

只是简单地加上 NonAction 属性即可。

[NonAction]
public string SimpleMethod()  
{
    return "Hi, I am not action method";
}

2,ActionResult 和 ViewResult 之间的关联?

ActionResult 是一个抽象类,而 ViewResult 是 ActionResult 的多层子类。多层是因为 ViewResult 是 ViewResultBase 的子类,而 ViewResultBase 是 ActionResult 的子类。

3,什么是 ContentResult?

ViewResult 呈现了一个完整的 HTML 响应而 ContentResult 呈现的时一个纯文本响应。就像返回一个纯 String 类型意义。所不同的是,ContentResult 是一个 ActionResult 类型 ,包装String 结果。ContentResult 也是 ActionResult 的子类。

4,可以无参调用 View 函数吗?

答案是可以的。View 函数会通过当前的「ActionName」来找视图。

5,ViewBag 仅仅是 ViewData 的语法蜜糖

6,protected internal ViewResult View(string viewName, object model);

View方法可以指定一个视图,并返回数据

7,强类型视图中都不加分号";",并且model为小写

@using WebApplication1.ViewModels
@model EmployeeListViewModel

8,数据库连接串和数据访问层是如何连接的?

Mapping 通过名称来实现。在我们的例子中,ConnectionString 名称和数据访问层类的名称是一样的,即「SalesERPDAL」,因此它们是自动映射的。

我们可以更改 ConnectionString 的名称吗?

答案是肯定的。在这个例子中,我们需要在数据访问层类中定义一个构造函数如下:

public SalesERPDAL():base("NewName")  
{
}

9,在 Action 方法里,Textbox 的值是如何更新 Employee 对象的?  这里区分大小写

在 ASP.NET MVC 中,存有一个概念,叫做 Model Binder。

  • 无论何时一个包含参数的请求向 Action 方法发送时,Model Binder 都会自动执行。

  • Model Binder 将会遍历方法的所有原始参数,然后将它们与发送过来的数据的参数的名称相对比。(发送过来的数据意味着要么是 Posted 数据,或者是查询字符串)。当匹配成功时,会依照发送过来的数据分配给参数。

  • 当 Model Binder 遍历完每一个类参数中的每一个属性后,然后和发送过来的数据做对比。当匹配成功后,依照发送过来的数据分配给参数。

10,当请求名称没有与接收参数的类中的属性名称匹配时,会怎样?

这是一个在面试中经常被问到的常规问题。

例如我们有一段 HTML 代码如下:

First Name: <input type="text" id="TxtFName" name="FName" value="" /><br />  
Last Name: <input type="text" id="TxtLName" name="LName" value="" /><br />  
Salary: <input type="text" id="TxtSalary" name="Salary" value="" /><br />  

  

现在我们的 Model 类包含的属性名称有 FirstName,LastName 和 Salary。因此默认的 Model Binder 将不会在这里处理。

在这种情形下,我们有三种解决方案:

  • 在 Action 方法内部,运用 Request.Form 语法来检索发送过来的值,然后手动构造 Model 对象如下:
public ActionResult SaveEmployee()  
{
     Employee e = new Employee();
     e.FirstName = Request.Form["FName"];
     e.LastName = Request.Form["LName"];
     e.Salary = int.Parse(Request.Form["Salary"])
...
...
}
  • 运用参数名称,然后手动创建 Model 对象如下:
public ActionResult SaveEmployee(string FName, string LName, int Salary)  
{
    Employee e = new Employee();
    e.FirstName = FName;
    e.LastName = LName;
    e.Salary = Salary;
...
...
}
  • 创建自定义的 Model Binder 来替换默认的 Model Binder。

第一步:创建自定义的 Model Binder

public class MyEmployeeModelBinder : DefaultModelBinder  
{
    protected override object CreateModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Type modelType)
    {
        Employee e = new Employee();
        e.FirstName = controllerContext.RequestContext.HttpContext.Request.Form["FName"];
        e.LastName = controllerContext.RequestContext.HttpContext.Request.Form["LName"];
        e.Salary = int.Parse(controllerContext.RequestContext.HttpContext.Request.Form["Salary"]);
        return e;
    }
}

第二步:用这个新的 Model Binder 来替换默认的 Model Binder

public ActionResult SaveEmployee([ModelBinder(typeof(MyEmployeeModelBinder))]Employee e, string BtnSubmit)  
{
    ......
}

13,什么是 EmptyResult?

它是 ActionResult 的其中一个子类。当浏览器接到的响应是 EmptyResult 时,它将会简单地呈现一个空白屏幕。它简单地代表「No Result」。

在我们的例子中,这种情形不会发生。只要确保所有的代码路径返回的值。

注:当 Action 方法返回的值是空的,结果等同于 EmptyResult。

14,运用 DataAnnotations 装饰属性。

[Required(ErrorMessage="Enter First Name")]
    public string FirstName { get; set; }

    [StringLength(5,ErrorMessage="Last Name length should not be greater than 5")]
    public string LastName { get; set; }

15,在使用Code First方法是,当Model中的类发生改变是,在 Global.asax 文件中的 Application_Start 中添加如下声明:

Database.SetInitializer(new DropCreateDatabaseIfModelChanges<SalesERPDAL>());

就会删除以前创建的表,重新建表

16,colspan 跟align都是td标签的属性<td colspan="2" align="right">

17,@Html.ValidationMessage("FirstName")对象中的指定字段出错时显示的信息,ValidationMessage 是 HtmlHelper 类的方法,用于呈现错误信息。

18,@ 意味着是 Razor 代码。

Html 是 视图中的 HtmlHelper 类的实例。

我们还有其它类似于 Required 和 StringLength 的属性吗?

答案是肯定的。如下所示:

  • DataType。确保数据是指定的类型,例如邮箱、信用卡号、URL 等。

  • EnumDataTypeAttribute。确保在 Enumeration 中存在该值。

  • Range Attribute。确保值在一个指定的区域内。

  • Regular。认证值是否是指定的表达式。

  • Required。确保值是存在的。

  • StringLength。认证字符串中的最大和最小字符长度。

19,在model中,一个值类型,即使不向它添加Data Annotation,他依然会得到认证.因为Model Binder还会考虑到属性的数据类型,所有的值类型都会被强制,因为他们不能为null

原文地址:https://www.cnblogs.com/taohonggou/p/5020190.html