Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Asp.NETMVC2应用程序中使用jquery确认删除链接_Asp.net_Jquery_Entity Framework_Asp.net Mvc 2 - Fatal编程技术网

在Asp.NETMVC2应用程序中使用jquery确认删除链接

在Asp.NETMVC2应用程序中使用jquery确认删除链接,asp.net,jquery,entity-framework,asp.net-mvc-2,Asp.net,Jquery,Entity Framework,Asp.net Mvc 2,我有一个带有删除链接的记录的表。基本上,我遵循了关于MVC中该部分的NerdDinner教程。但是我不想使用confirm视图,我宁愿使用confirm对话框,如果确认了,就让HttPost操作方法直接删除记录 我做了一些工作,但作为MVC和jQuery的新手,我不确定我是否做对了 以下是jQuery: $(function () { $('.delete').click(function () { var answer = confirm('Do

我有一个带有删除链接的记录的表。基本上,我遵循了关于MVC中该部分的NerdDinner教程。但是我不想使用confirm视图,我宁愿使用confirm对话框,如果确认了,就让HttPost操作方法直接删除记录

我做了一些工作,但作为MVC和jQuery的新手,我不确定我是否做对了

以下是jQuery:

    $(function () {
        $('.delete').click(function () {
            var answer = confirm('Do you want to delete this record?');
            if (answer) {
                $.post(this.href, function () {
                    window.location.reload(); //Callback
                });
                return false;
            }
            return false;
        });
    });
以及删除操作链接:

<%: Html.ActionLink("Delete", "Delete", new { id = user.UserID }, new { @class = "delete" })%>
现在,我有几个问题:

  • 我找到了制作链接帖子而不是上网的功能:`$.POST(this.href);返回false;我也不确定“返回错误”部分的作用。我试图通过回调等方式修改它以满足我的需要,并在不知道它的用途的情况下保留了返回部分

  • 其次,action方法具有HttpPost属性,但我也在某个地方读到可以使用delete动词。你应该吗?那么重定向操作呢?其最初的目的是刷新页面,但这不起作用,因此我在jQuery的回调中添加了window.location.reload。有什么想法吗

  • Delete操作方法调用了几个helper方法,因为在我用于数据的实体框架中,如果记录具有关系依赖性,我就不能只删除它。我必须先删除关系,然后删除“用户”记录本身。这很好,但我认为可以删除一条记录,所有的关系都会自动删除

  • 我知道你不应该直接删除链接,因为爬虫等可能会意外删除记录。但是对于jQuery,是否存在任何安全问题?当中间有一个jQuery检查时,爬虫程序不能这样做,对吗


  • 如有任何澄清,将不胜感激

    就这样,有完整的代码:

    或者只是html帮助程序:

    public static string DeleteLink(this HtmlHelper html, string linkText, string routeName, object routeValues) {
        var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
        string url = urlHelper.RouteUrl(routeName, routeValues);
    
        string format = @"<form method=""post"" action=""{0}"" class=""delete-link"">
        <input type=""submit"" value=""{1}"" />
        {2}
        </form>";
    
        string form = string.Format(format, html.AttributeEncode(url), html.AttributeEncode(linkText), html.AntiForgeryToken());
    
        return form + html.RouteLink(linkText, routeName, routeValues, new { @class = "delete-link", style = "display:none;" });
    }
    
    publicstaticstringdeletelink(此HTMLHelperHTML、stringlinkText、stringrouteName、objectrouteValue){
    var urlHelper=新的urlHelper(html.ViewContext.RequestContext);
    字符串url=urlHelper.RouteUrl(routeName,routeValues);
    字符串格式=@“
    {2}
    ";
    string form=string.Format(格式为html.attributencode(url)、html.attributencode(linkText)、html.AntiForgeryToken());
    返回表单+html.RouteLink(linkText,routeName,routeValue,新的{@class=“delete link”,style=“display:none;”);
    }
    
    关于您的问题:

  • 当您在链接上的javascript单击处理程序末尾执行返回false时,浏览器会执行javascript,但不会跟随链接,因为返回false

  • 为了(最大)跨浏览器兼容性,不应使用删除动词

  • 我不太了解EF,但它是否提供了级联删除的映射配置

  • HTTP GET应仅用于获取信息,例如,为搜索提供参数。爬虫通常不关心javascript,所以他们会盲目地跟踪你的链接。如果它对您不利,如果您没有控制器上的[HttpPost]操作

  • 返回false
    语句用于 目的与
    e.preventDefault()
    在这种情况下。 通过返回false,JavaScript可以防止 浏览器无法执行链接的 默认的点击处理程序

  • DELETE动词用于restfulweb 服务,很可能不是什么 你想在这种情况下,因为 并非所有浏览器都能完全实现它。 请在此处阅读更多关于它们的信息:

  • 子对象的删除规则 实体依赖于实体 中的OnDelete/OnUpdate规则 上下文定义和 中的外键约束 数据库你可以

  • 爬虫程序将无法 在此页面中激活您的删除链接 时尚,因为你已经指定 删除操作将通过 邮递如果删除是一个GET,那么 这将是一个令人担忧的问题。尽管如此,它是 保持直接的链接是不明智的 修改正面的内容 不需要的页面 作为人的身份验证最有可能 当然可以利用这个过程


  • 如果您还想将jQuery对话框抛出给参与方,那么这就做得很好


    谢谢!但是关于删除规则:我如何设置它们?在谷歌上搜索我知道我也应该在数据库中“设置级联删除”。但我找不到任何关于如何做到这一点的方法。我只知道在关系中将“强制外键约束”设置为“是”。这取决于您的数据库引擎,但下面是一些如何定义外键约束的示例:
    public static string DeleteLink(this HtmlHelper html, string linkText, string routeName, object routeValues) {
        var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
        string url = urlHelper.RouteUrl(routeName, routeValues);
    
        string format = @"<form method=""post"" action=""{0}"" class=""delete-link"">
        <input type=""submit"" value=""{1}"" />
        {2}
        </form>";
    
        string form = string.Format(format, html.AttributeEncode(url), html.AttributeEncode(linkText), html.AntiForgeryToken());
    
        return form + html.RouteLink(linkText, routeName, routeValues, new { @class = "delete-link", style = "display:none;" });
    }