Asp.net mvc 为什么T4MVC尝试从Html.ActionLink运行控制器操作?

Asp.net mvc 为什么T4MVC尝试从Html.ActionLink运行控制器操作?,asp.net-mvc,views,t4mvc,Asp.net Mvc,Views,T4mvc,在我的控制器中,我传入一个IUnitOfWork对象(由IoC生成),然后在控制器操作中用于数据库功能(将IUnitOfWork传递到我的服务层) 在我的一个视图中,我想提供一个指向/Company/View/的链接,因此我称之为: <li>@Html.ActionLink(company.Name, MVC.Company.View(company.Id))</li> 奇怪的是,我无法用上面的代码重新处理这个问题。应该发生的是,调用MVC.Company.View(C

在我的控制器中,我传入一个
IUnitOfWork
对象(由IoC生成),然后在控制器操作中用于数据库功能(将
IUnitOfWork
传递到我的服务层)

在我的一个视图中,我想提供一个指向
/Company/View/
的链接,因此我称之为:

<li>@Html.ActionLink(company.Name, MVC.Company.View(company.Id))</li>

奇怪的是,我无法用上面的代码重新处理这个问题。应该发生的是,调用MVC.Company.View(Company.Id)最终会调用动作方法的重写,而不会真正调用真正的动作方法

为了实现这一点,生成的代码应该如下所示(仅保留相关内容):


你能看看生成的代码,看看是否有什么不同吗?首先在“MVC”上执行“Go To Definition”,这将打开T4MVC.cs(在T4MVC.tt下)。

您的实际操作永远不会被调用。你能提供更多关于你的公司控制者和行动方法的细节吗?我不需要impl的详细信息,只需要声明。我已经添加了在本文中使用的控制器、构造函数和操作声明。如果你有别的意思,请告诉我,我会更新的。谢谢似乎您缺少操作上的方法名称。另外,您是否可以包括MyCustomBaseController及其构造函数?我的目标是能够复制你在一个小应用上看到的东西。对不起,我粘贴错了。我用我的代码库中的真实代码更新了它。@KallDrexx ActionLink将当前控制器放在里面;请尝试使用
RouteLink
。如果行得通的话,让我知道,我会写下来作为回答。那真烦人。显然,它从未重新生成CompanyController T4,因为
View()
不在其中,但我的所有其他操作都在其中。希望它更自动,但明确地重新运行T4似乎已经解决了它,我没有更多的崩溃。标记作为感谢您帮助我克服我的愚蠢的答案:)您可能想查看自动运行T4MVC的方法。哦,太棒了。我以前使用过chirpy进行JS整合,但不知道它可以处理t4。谢谢
public partial class CompanyController : MyCustomBaseController
{
    public CompanyController(IUnitOfWork unitOfWork)
    {
    }

    public virtual ActionResult Add(int jobSearchId)
    {
    }

    public virtual ActionResult Edit(int id)
    {
    }

    [HttpPost]
    public virtual ActionResult Edit(Company company, int jobSearchId)
    {
    }

    public virtual ActionResult View(int id)
    {
    }
}

public class MyCustomBaseController: Controller
{
    public MyCustomBaseController()
    {
    }

    public int CurrentUserId { get; set; }
}
public static class MVC {
    public static Mvc3Application.Controllers.CompanyController Company = new Mvc3Application.Controllers.T4MVC_CompanyController();
}

public class T4MVC_CompanyController: Mvc3Application.Controllers.CompanyController {
    public T4MVC_CompanyController() : base(Dummy.Instance) { }

    public override System.Web.Mvc.ActionResult View(int id) {
        var callInfo = new T4MVC_ActionResult(Area, Name, ActionNames.View);
        callInfo.RouteValueDictionary.Add("id", id);
        return callInfo;
    }
}