gpt4 book ai didi

asp.net-mvc - 为什么 T4MVC 尝试从 Html.ActionLink 运行 Controller 操作?

转载 作者:行者123 更新时间:2023-12-03 17:49:13 25 4
gpt4 key购买 nike

在我的 Controller 中,我传入了 IUnitOfWork对象(从 IoC 生成),然后在 Controller 操作中用于数据库功能(IUnitOfWork 被传递到我的服务层)。

在我的一个观点中,我想给出一个链接到/Company/View/<id> ,所以我称之为:

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

这不是从 Company 调用的 Controller ,但从不同 Controller 中的 View 。问题似乎是 MVC.Company.View(company.Id)似乎实际上是在调用 CompanyController.View(id)方法本身。这有两个原因。

1) 自 CompanyController的非无参数构造函数永远不会被调用,没有 UnitOfWork存在,因此当 View(int id) Action 被调用, Action 的数据库调用失败并返回 NullReferenceException .

2) 即使 IUnitOfWork存在,我的 View 不应该触发数据库调用,只是为了生成我的链接。 Html.ActionLink(company.Name, "View", new { id = company.Id })不会触发任何数据库调用(因为没有调用 action 方法)就我而言 tml.ActionLink(company.Name, MVC.Company.View(company.Id))也不应该触发任何数据库调用。过多的数据库调用绝对没有 yield 。

是否有任何理由创建 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”上执行“Go To Definition”,这将打开 T4MVC.cs(在 T4MVC.tt 下)。

关于asp.net-mvc - 为什么 T4MVC 尝试从 Html.ActionLink 运行 Controller 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com