Asp.net mvc 调用了错误的mvc函数

Asp.net mvc 调用了错误的mvc函数,asp.net-mvc,razor,Asp.net Mvc,Razor,我是网络应用程序编程新手,被指派清理一些没有人真正记得曾经使用过的遗留代码 其中一部分是添加一个新函数以取消提交费用。我设置了easy功能,并添加了一个指向它的按钮 单击该按钮时,将导致“取消提交”按钮中未提及的编辑功能 以下是“取消提交”按钮的代码 <a href="@(Url.Action("Unsubmit",new {id=item.ID}))">UnSubmit</a> 以及编辑的声明: [OutputCache(NoStore = true, Duratio

我是网络应用程序编程新手,被指派清理一些没有人真正记得曾经使用过的遗留代码

其中一部分是添加一个新函数以取消提交费用。我设置了easy功能,并添加了一个指向它的按钮

单击该按钮时,将导致“取消提交”按钮中未提及的编辑功能

以下是“取消提交”按钮的代码

<a href="@(Url.Action("Unsubmit",new {id=item.ID}))">UnSubmit</a>
以及编辑的声明:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public ActionResult Edit(ExpenseItem expenseItem){...

它从不进入unsubmit函数,我做错了什么,它是如何决定进入的?

您明显的问题是参数类型不匹配

请尝试以下签名:

public ActionResult取消提交(int-id)

由于您在提交中指定提交的参数名称为id。

@Url.Action(…)
中,您没有指定控制器,您应该使用
expenseId
而不是
id

您的
Unsubmit
操作还需要传递
ExpenseItem
对象,而不是Id。我们还将更改下面的签名

它应该如下所示(将
HomeController
替换为您所在的任何控制器):


Url.Action构造函数之一是:

Url.Action(string actionName, string controllerName , Parameters)
使用控制器的名称尝试此操作

<a href="@(Url.Action("Unsubmit",ControllerName,new {id=item.ID}))">UnSubmit</a>


另外,您正在声明两个不同的变量名id和expenseItem,您需要在这两个变量上使用相同的变量名
id
expenseItem
(我更喜欢这一个,甚至更好的命名约定)

我执行了您的建议,但仍然不起作用。也许这与从``调用的edit有关,它没有指定控制器并使用ID调用,但函数中有expenseItem。edit与此无关。你能用你尝试过的代码更新你的问题吗(即:我在答案中有什么),并说明什么不起作用?它现在应该可以100%工作了,我刚刚创建了一个POC来证明这一点。这就是我要说的,编辑按钮可以在没有控制器名称的情况下工作。我在Unsubmit中添加了一个控制器名,并更改了参数类型以匹配,但仍然不起作用
public ActionResult Unsubmit(int expenseID)
不知何故,它仍然会转到编辑功能。听起来您的
RouteConfig.cs
文件中可能发生了一些事情。“编辑”按钮正在工作这一事实毫无意义。如果编辑按钮发送的是
Id
(可能是
int
),那么它不可能与期望
ExpenseItem
对象的签名相匹配。好的,我会研究一下,就像我说的,我是ASP.NET新手,对这个项目没有真正的指导。非常感谢。
public ActionResult Unsubmit(int expenseId)
Url.Action(string actionName, string controllerName , Parameters)
<a href="@(Url.Action("Unsubmit",ControllerName,new {id=item.ID}))">UnSubmit</a>