使用jQuery和amp;的ASP.NET MVC授权AJAX在IE中发布

时间:2010-07-08 16:54:27

标签: asp.net-mvc ajax asp.net-mvc-2 jquery

我不确定如何在不包含我的一半网站代码的情况下发布此问题,但现在就去了。

我有一个包含转包表格,公司表格和联系表格的网站。在转包表单中,您可以通过按钮创建新公司和/或新联系人,这些按钮可打开jQuery对话框并发布公司或联系信息。从公司表单中,有一个用于创建新联系人的按钮。

从转包表格:

$('#popupCreateCompany').dialog(
        {
            autoOpen: false,
            modal: true,
            width: 600,
            open: function(event, ui) {
                if ($('#primary_company').val().length > 0) {
                    $('#secondary').attr('checked', 'true');
                }
                else {
                    $('#primary').attr('checked', 'true');
                    $('#sec').hide();
                }
            },
            buttons:
            {
                'Add': function() {
                    var dialog = $(this);
                    var form = dialog.find('input:text, select');
                    $.post('<%= ResolveUrl("~/company/post") %>', $(form).serialize(), function(data) {
                        if (data.Result == "success") { ...

$('#popupCreateContact').dialog(
        {
            autoOpen: false,
            modal: true,
            width: 600,
            buttons:
            {
                'Add': function() {
                    var dialog = $(this);
                    var form = dialog.find('input:text, select');
                    $.post('<%= ResolveUrl("~/contact/post") %>', $(form).serialize(), function(data) { ...

从公司表格:

$('#popupCreateContact').dialog(
        {
            autoOpen: false,
            modal: true,
            buttons:
            {
                'Add': function() {
                    var dialog = $(this);
                    var form = dialog.find('input:text, select');
                    $.post('<%= ResolveUrl("~/contact/post") %>', $(form).serialize(), function(data) {
                        if (data.Result == "success") { ...

此功能一直有效,直到我们对网站实施了一些自定义授权。现在,您可以从转包表单添加联系人,但不能从转包合同中添加公司。您无法从公司表单添加联系人。当您单击“添加”时,没有任何反应。我在$.post行之前和之后添加了一个提醒,它之前点击了警报,但之后没有提醒。在联系人/职位上设一个断点,它永远不会到达那里。相同的授权组有权添加分包合同,公司和联系人。

在公司控制人员中:

[AcceptVerbs(HttpVerbs.Post), MarlowAuthorize(Roles = "Subcontract_Modify, Admin", ViewName = "AuthorizationError")]
    public JsonResult Post(company company)
    {
        if (ModelState.IsValid)
        {
            try
            {

从公司表格中的转包表格中调用相同的联系后例程。但是一个有效,另一个没有。在Contact Controller中:

[AcceptVerbs(HttpVerbs.Post), MarlowAuthorize(Roles = "Subcontract_Modify, Admin", ViewName = "AuthorizationError")]
    public JsonResult Post(contact contact)
    {
        if (ModelState.IsValid)
        {
            try
            {

我尝试将授权属性添加到控制器中的位置,我尝试删除它们。无论我尝试什么组合,我得到相同的结果。您可以从转包中添加联系人,但不能添加公司。而且,您无法添加公司的联系人。我一直在想,知道这将导致我看到某处有什么不同,但我似乎无法找到它。

修改 刚进入Firefox使用Firebug,它似乎在Firefox中运行。但是在IE7或IE8中不起作用。

2 个答案:

答案 0 :(得分:3)

使用Fiddler并比较Firefox和IE发送的数据的差异。

答案 1 :(得分:0)

有了工作,但我有兴趣知道是否有人可以解释“为什么”。

更改了此

var dialog = $(this);
var form = dialog.find('input:text, select');
$.post('<%= ResolveUrl("~/company/post") %>', $(form).serialize(), function(data) { ...

var dialog = $(this);
var form = $('#popupCreateCompany').find('input:text, select');
$.post('<%= ResolveUrl("~/company/post") %>', $(form).serialize(), function(data) { ...

现在可以在IE中使用。

我不明白为什么它在上周才起作用,为什么它仍然适用于分包合同的联系,而不是来自分包合同的公司或公司的联系。