为什么T4MVC尝试从Html.ActionLink控制器操作?

在我的控制器我传递一个IUnitOfWork对象(这是从产生的IoC),然后在数据库功能控制器的操作使用(在IUnitOfWork传递给我的服务层)。

在我的观点之一,我想给一个链接到/Company/View/<id> ,所以我所说的以下内容:

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

这是被从被叫不Company控制器,但是从图中不同的控制器。 这个问题似乎是该MVC.Company.View(company.Id)似乎实际上是调用CompanyController.View(id)方法本身。 这是不好的原因有二。

1)由于CompanyController的非参数的构造函数永远不会被调用,没有UnitOfWork存在,因此当View(int id)的动作被调用,操作的数据库调用失败,一个NullReferenceException

2)即使IUnitOfWork存在,我认为不应该触发数据库调用只是这样生成我的链接。 Html.ActionLink(company.Name, "View", new { id = company.Id })不会触发任何数据库调用(如操作方法不调用),所以就我而言tml.ActionLink(company.Name, MVC.Company.View(company.Id))不应该被触发任何DB调用无论是。 它是绝对没有增益过大的数据库调用。

有T4MVC创建运作这种方式的原因是什么?


编辑:这里是为CompanyController声明

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; } }

--------------解决方案-------------

奇怪了,我不能瑞普这个问题与上面的代码。 什么应该发生的是,调用MVC.Company.View(company.Id)结束调用动作方法的重写,而且从来没有真正叫你真正的操作方法。

为了使这项工作,生成的代码看起来应该像这样(只保留相关的东西):

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;
}
}

你可以看一下生成的代码,你能看到它是否有什么不同? 通过做“转到定义”在'MVC',这将打开T4MVC.cs(T4MVC.tt下)启动。

分类:asp.net mvc的 时间:2015-03-15 人气:6
本文关键词: asp.net的MVC,视图,t4mvc
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.295 (s). 10 q(s)