MVC提交表单方法不触发控制器

时间:2017-01-16 15:41:06

标签: c# asp.net-mvc

问题

我已经获得了一段由其他人多年前编写的代码,我试图了解为什么这段代码无效。

我有一个 Edit.aspx 页面,里面有一个超链接列表,其中一个链接是删除标签,但在其中有一个RenderPartial(参见以下):

<% Html.RenderPartial("UserDeleteLink", Model); %>

在UserDeleteLink.ascx页面中,它包含删除按钮:

<li>
    <% using (Html.BeginForm("Delete", "User", new { id = Model.uID }, FormMethod.Post, new { id = "DeleteForm" }))

    { %> 
        <a class="delete-user-button expired" href="javascript:void(0);"><%: Resources.GeneralDelete %></a>         
 <% } %>
</li>

现在在UserController.cs中,它有一个从数据库中删除记录的方法:

[HttpPost, ActionName("Delete")]
[RequireAdminAttribute]
[Authorize]
public ActionResult DeleteConfirmed(int id)
{
    _userRepository.Delete(id);
    _userRepository.Save();
    return RedirectToAction("Index", "Admin");
}

问题是该方法没有受到影响,我似乎无法调试此问题。

有人能看到这个问题吗?

3 个答案:

答案 0 :(得分:1)

这里可能有三件事......

  1. 看起来你没有提交。尝试在表单中添加提交按钮:

    <input type='submit' value='Delete' />
    
  2. 检查你的身份证。在你的控制器中,它是一个int。但在您的表单中,您似乎正在分配字符串。模型绑定器可能会返回错误。

  3. 检查路由配置(通常在App_Start中)。检查它是否使用默认的{controller} / {action},或者是否正在进行某些自定义路由。

  4. 最后,在提交表单时尝试使用F12调试工具。检查网络流量以确切地查看正在命中的URL以及正在发送的参数。您还可以看到POST发回的一些错误消息。

答案 1 :(得分:0)

好像你没有提交表格。

尝试将onclick="form.submit();"添加到您的链接元素

<a class="delete-user-button expired" href="javascript:void(0);" onclick="form.submit();"><%: Resources.GeneralDelete %></a>

答案 2 :(得分:0)

尝试以下操作,从Action方法中删除所有属性并将表单简化为以下

//[HttpPost, ActionName("Delete")]
//[RequireAdminAttribute]
//[Authorize]
public ActionResult DeleteConfirmed(int id)
{
    _userRepository.Delete(id);
    _userRepository.Save();
    return RedirectToAction("Index", "Admin");
}

<% using (Html.BeginForm("DeleteConfirmed", "User"))
{ %>
<input name="id" value="1"/>
<input type='submit'/>
<% } %>

或者更好的是,使用HTML表单标签来创建表单。

一旦你掌握了基本的东西,一个接一个地尝试将属性添加回ActionMethod和Form。这应该有助于你指出它为什么不起作用。