• 【MVC】VS常用技巧


    1,在VS2010中,选中指定的代码段,可以拖拽到工具箱中,形成标签,以后还想书写类似的代码,双击鼠标即可。

    2,在VS2012中,可以在注释上标注//TODO:我是注释

    这样,注释就会出现在任务列表中,一些关键常用的方法/字段/关注点,通过这种方式快速定位。如图:

    3,在VS2012中是不支持MVC1.0和MVC2.0的,如果要开启低版本MVC项目的话,必须使用VS2010

    4,_ViewStart.cshtml文档会在所有其他所有视图(VIEW)运行之前载入。

    发现使用布局页的视图没有完整的HTML结构,是因为类似的视图都作为一部分被装载到布局页中,由_ViewStart.cshtml文档指定,默认为_Layout.cshtml。

    5,可以在视图页面的头部定义ViewBag的临时变量,而不必是在Controller的Action方法中定义,如图:

    6,在浏览网页时,如果只是指定Controller,而不指定Action,而控制器和动作方法均是必须的路由参数,这时将去RegisterRoutes()方法中取默认的Action值,如图:

    上图中默认的方法为Index,也就是说当我们输入.../example的时候,会自动路由为.../example/index

    7,如果在View中定义了@model模型声明,那么通过Controller传进View的模型类型必须与View中所声明的类型兼容,否则将产生异常,如图:

    8,在view文档(也就是cshtml中),<head>标签中的<title>标签指标题,如图:

    9,如下代码:

    <p>
    @Html.ActionLink("Create New", "Create")
    </p>

    创建链接,因为没有指定链接的控制器名称,所以链接到当前控制器的Create动作方法,显示的文本为“Create New"。

    10,HTTP GET POST

    HTTP GET负责显示编辑的窗体,HTTP POST负责实际更新数据库里的属性。

    11,杂:

    @Html.HiddenFor(model => model.ID)   生成HTML窗体的隐藏域

    HTML注释符号:<!--我是被注释的内容-->

    在ASP.NET MVC中不建议使用Request对象和Response对象

    不要在视图中撰写过多的程序逻辑,实现“关注点分离”

    网址路由在MVC中的作用:

    1、比对浏览器传过来的HTTP请求,对应到适当的控制器和Action进行处理;

    2、决定MVC输出什么样的响应给浏览器;

    12,网址路由

    比如:单击“主页”链接,浏览器将URL封包,并发送HTTP要求到服务器上,IIS接收到这个HTTP封包,转给网址路由模块负责将HTTP请求交由那个HTTPHandler处理,对于MVC来说,自然是转交给MVCHandler处理,这才会进入MVC的运行声明周期。

      所有ASP.NET Web程序的入口点均是Application_Start()事件,其中 RouteConfig.RegisterRoutes(RouteTable.Routes);

      代码中的Routes是一个公开的静态变量,用来保存所有网址路由的规则集合,为RouteCollection类型的变量。

      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        代码中,表示不要通过网址路由处理,即如果从浏览器传递过来的网址,匹配该规则,将由IIS的其他Http模块处理,将不会进入ASP.MET MVC的生命周期。

      url: "{controller}/{action}/{id}"

      代码中URL样式包含三个路由参数,分别是Controller/Action/ID,注意该URL样式不能以‘/'开头。

      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

      默认值。当对比不到HTTP请求的网址时,会尝试带入代码中的默认值。

      当接收到HTTP请求时,将从上而下逐条比对,直到找到符合的网址格式。

      注意ID不算在网址路由之中,属于QueryString的部分。

    1                 routes.MapRoute(
    2                 name: "Default",
    3                 url: "{controller}/{action}/{id}",
    4                 defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    5             );        

      上述代码中,MapRoute使用的是具名参数。

    13,MVC的运行声明周期

         网址路由比对-->运行Controller与Action-->运行View并回传结果

    14,MVC在比对网址路由时,默认情况下,如果查找到网站实体目录中查找相应的实体文档,会自动略过所有网址路由比对。

       如果想打破这种默认行为,那么在MVC程序的入口Application_Start()中,添加如下代码:

      RouteTable.Routes.RouteExistingFiles = true;

      当网址路由比对成功时,MVC默认交由MvcHandler处理。


    1,在ASP.NET MVC中,路由机制特别碉堡,直接对应于动作方法。没有必要给每一个动作方法添加视图,当视图返回View时,路由系统会自动寻找指定目录下的视图资源。

    1 public ViewResult AutoProperty()
    2 {
    3        Product p = new Product();
    4        p.Name = "Chris";
    5        return View("Result", (object)String.Format("你是:{0}", p.Name));
    6 }

    如AutoProperty时HomeController中的动作方法,并没有指定视图,但是在返回视图的时候,会自动在ViewsHome下查找指定的视图资源。

    Url为~/Home/AutoProperty。同样验证了URL与动作方法的一致性。

    2,@HTML

     @Html.DisplayNameFor(model => model.Email)显示属性名称,在定义属性时可以设置DisplayName属性来修改显示的名称。

    如:

    1         [DisplayName("电子邮件地址")]
    2         public string Email { get; set; }

    这样,@~处将不显示“Email”,而是显示“电子邮件地址”。

    @Html.DisplayFor(modelItem => item.Name),显示的是特定Item的Name值,如:SharpL

    @Html.ActionLink("Edit", "Edit", new { id=item.ID }) ,ActionLink用来输出超链接,第一个参数指超链接的显示文本,第二个参数指Action,第三个参数为路由参数。

    @Html.LabelFor(model => model.Name),特定字段的显示名称,对于Email来说任然会显示“电子邮件地址”,所以和DisplayNameFor类似。

    二者存在细微的差异,在输出的HTML中,LabelFor输出的内容包含<label>标签,而DisplayFor只会输出属性的显示名称。如图:

    1         <div class="editor-label">
    2             <label for="Email">电子邮件地址</label>
    3         </div>

    出处:

    http://www.cnblogs.com/SharpL/p/4587010.html

    http://www.cnblogs.com/SharpL/p/4549632.html

  • 相关阅读:
    一个不错的时间日期控件My97DatePicker
    实现dropDownList listBox联动
    删除字符串最后一个字符的几种方法
    Visual Studio 2008 Express 中文版下载
    DotNet上传大文件
    asp.net下获取Excel所有的工作表名称
    无法访问http,会强制跳到https
    循环
    P7516[省选联考2021A/B卷]图函数【bfs】
    AT2371[AGC013E]Placing Squares【矩阵乘法】
  • 原文地址:https://www.cnblogs.com/mq0036/p/9083257.html
Copyright © 2020-2023  润新知