我已经获得了一段由其他人多年前编写的代码,我试图了解为什么这段代码无效。
我有一个 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");
}
问题是该方法没有受到影响,我似乎无法调试此问题。
有人能看到这个问题吗?
答案 0 :(得分:1)
这里可能有三件事......
看起来你没有提交。尝试在表单中添加提交按钮:
<input type='submit' value='Delete' />
检查你的身份证。在你的控制器中,它是一个int。但在您的表单中,您似乎正在分配字符串。模型绑定器可能会返回错误。
检查路由配置(通常在App_Start中)。检查它是否使用默认的{controller} / {action},或者是否正在进行某些自定义路由。
最后,在提交表单时尝试使用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。这应该有助于你指出它为什么不起作用。