为什么在新控制器的Index操作之上添加一个空注释(只是“//”)?

时间:2013-09-25 08:41:36

标签: asp.net-mvc asp.net-mvc-4

当我在Visual Studio中添加新控制器时,它会创建如下代码:

public class RatesController : Controller
{
    //     <-- Why is this empty comment added?
    // GET: /Rates/
    public ActionResult Index()
    {
        return View();
    }
}

我只是对原因感到好奇。

2 个答案:

答案 0 :(得分:4)

它没有用处 - 它只是某人使用的特定风格。在Visual Studio中添加控制器时,将调用文本模板(Controller.tt,在%VisualStudioInstallLocation%\Common7\IDE\ItemTemplates\CSharp\Web\MVC 4\CodeTemplates\AddController下)。此模板以:

开头
<#@ template language="C#" HostSpecific="True" #>
<#
MvcTextTemplateHost mvcHost = (MvcTextTemplateHost)(Host);
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace <#= mvcHost.Namespace #>
{
    public class <#= mvcHost.ControllerName #> : Controller
    {
        //
        // GET: <#= (!String.IsNullOrEmpty(mvcHost.AreaName)) ? ("/" + mvcHost.AreaName) : String.Empty #>/<#= mvcHost.ControllerRootName #>/

        public ActionResult Index()
        {
            return View();
        }

<#
if(mvcHost.AddActionMethods) {
#>
        //
        // GET: <#= (!String.IsNullOrEmpty(mvcHost.AreaName)) ? ("/" + mvcHost.AreaName) : String.Empty #>/<#= mvcHost.ControllerRootName #>/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: <#= (!String.IsNullOrEmpty(mvcHost.AreaName)) ? ("/" + mvcHost.AreaName) : String.Empty #>/<#= mvcHost.ControllerRootName #>/Create

        public ActionResult Create()
        {
            return View();
        }

正如您所看到的,空//在所有方法中都是一致的,并且不会在这些行上放置任何内容。如果您真的关心它,可以编辑模板以删除这些行(我建议先备份)

答案 1 :(得分:1)

我想模板的作者希望强调该操作方法应该主要由Rate Controller的GET方法使用(而不是通过vs POST,DELETE或其他方法)。

这是另一个示例模板(ApiController.tt)。在操作之前注释GET,POST和DELETE注释:

<#@ template language="C#" HostSpecific="True" #>
<#
MvcTextTemplateHost mvcHost = (MvcTextTemplateHost)(Host);
string pathFragment = mvcHost.ControllerRootName.ToLowerInvariant();
#>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace <#= mvcHost.Namespace #>
{
    public class <#= mvcHost.ControllerName #> : ApiController
    {
<#
if(mvcHost.AddActionMethods) {
#>
        // GET api/<#= pathFragment #>
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/<#= pathFragment #>/5
        public string Get(int id)
        {
            return "value";
        }

        // POST api/<#= pathFragment #>
        public void Post([FromBody]string value)
        {
        }

        // PUT api/<#= pathFragment #>/5
        public void Put(int id, [FromBody]string value)
        {
        }

        // DELETE api/<#= pathFragment #>/5
        public void Delete(int id)
        {
        }
<#
}
#>
    }
}