使用超链接而不是按钮提交表单

时间:2011-10-24 13:46:44

标签: asp.net-mvc asp.net-mvc-3

我在asp.net mvc3 razor视图中创建了一个删除链接,如下所示:

 <td>
                @Html.ActionLink("Edit", "EditCategory", new { id = item.CategoryId }) |
                @Html.ActionLink("Details", "Details", new { id = item.CategoryId }) |

                @using (Html.BeginForm("Delete", "Admin"))
                {
                    @Html.Hidden("id", item.CategoryId)
                    <input type="submit" value="Delete" />
                }
            </td>

并创建了一个这样的动作方法:

 [HttpPost]
        public ActionResult Delete(int Id)
        {

            Category category = repository.Categories().FirstOrDefault(c => c.CategoryId == Id);
            if (category != null)
            {
                repository.DeleteCategory(category);
                TempData["message"] = string.Format("{0} was deleted", category.CategoryName);
            }
            return RedirectToAction("Categories");
        }

工作正常。但我想使用超链接删除,因为我用于编辑和详细信息。如何使用actuionlink更换按钮。我试过了,但它没有进入删除帖子操作链接,我得到查看未找到错误。

2 个答案:

答案 0 :(得分:4)

你可以使用css看起来像链接而不是按钮,就像这样。

<input type="submit" value="delete" style="border: none; background: none; 
                                           text-decoration: underline; 
                                           cursor: pointer;"> 

答案 1 :(得分:2)

小心不要通过HTTP GET使删除操作可用。 HTTP规范建议HTTP POST用于破坏性操作(如删除)。这可以防止Web爬虫执行它们。

默认情况下,超链接会发出HTTP GET。如果将删除操作更改为超链接,请确保覆盖其行为(通过JavaScript)以发出HTTP POST。然后你需要考虑如果浏览器关闭JavaScript会发生什么。

您可能需要考虑的另一种方法是[[使您的删除按钮看起来像通过CSS样式的超链接[1]]。

[1] http://www.xlevel.org.uk/post/How-to-style-a-HTML-Form-button-as-a-Hyperlink-using-CSS.aspx