为什么我的表单会触发错误的控制器操作?

时间:2010-12-23 05:49:03

标签: asp.net-mvc forms post asp.net-mvc-routing

这个表单有多个提交按钮,当点击时,它调用一个简单的JavaScript函数来改变一个隐藏输入的值(函数被称为“setHidden”。这个工作之前,在其他一些不相关的代码之后,它已经停止工作了。 从本质上讲,它应该调用的动作永远不会被调用,而是似乎默认返回到以前的URL。

表格:

<form action="/League/RemoveOwner" method="post">
    <input type="hidden" value="1007" name="lid"/>
    <input type="hidden" value="0" id="index" name="index"/>
    <input type="image" src="../../Resources/Images/Delete.png"
           height="12" alt="Remove Owner" title="Remove Owner"
           onclick="setHidden('index', '1031')"/></a> coach<br />
</form>

控制器:

[HttpPost]
public ActionResult RemoveOwner(int id, string index)
{
    //yada
    return PartialView();
}

单击图像时,它应调用删除所有者控制器,而不是调用“视图”控制器:

public ActionResult View(int id)  {  
//yada
return View();
}

2 个答案:

答案 0 :(得分:0)

经过高低搜索,我终于找到了问题所在。页面上还有另一个没有结束标记的表单。这种形式应该把它带回“视图”控制器。这是部分的,所以我没有抓住它,直到......直到我绞尽脑汁待了2个小时......

答案 1 :(得分:0)

您构建操作代码的另一个建议是不要写表单操作的绝对路径。您可以使用Html.BeginForm()或在web.config中编写您的站点URL,并在应用程序从global.ascx开始时将其提取到Application [“URL”]。然后您的表单应如下所示:

<form action="<%=Application["URL"]%>League/RemoveOwner">

此方法可以避免在发布到IIS或其他Web服务器时出现一些错误。