首页 新闻 会员 周边 捐助

asp.net mvc Action 被执行两次

0
悬赏园豆:10 [已解决问题] 解决于 2014-08-28 10:09

问题:1:Action Contents 不知道为什么被执行两次。

       2:action 走两次就算了,第二次action获得的this._HtmlDocument确没有被渲染到

html上,还是第一次this._HtmlDocument的内容.....

-----代码:----------------------------------->>>>>>>>>>

   [HttpGet]
        public ActionResult Contents(string id)
        {
            this._HtmlDocument = this._Service.GetEditContent(string.IsNullOrEmpty(id) ? _Application.SelectedService() : this._Service.GetService(id));
            return View("Contents", this._HtmlDocument);
        }

-----相关cshtml----------------------------------->>>>>>>>>>

@{
    Layout = null;
}
@model HtmlAgilityPack.HtmlDocument
@Html.Raw(@Model.DocumentNode.OuterHtml)

CocoPage的主页 CocoPage | 初学一级 | 园豆:84
提问于:2014-06-18 17:58
< >
分享
最佳答案
0

需要确认下问题,这点代码完全看不出走两次的情况。

收获园豆:10
幻天芒 | 高人七级 |园豆:37207 | 2014-06-19 09:41

皇天不负有心人,走两次的原因查出来了,问题算是解决了。是因为cshtml里定义了OnComplete,而js里又手动调了次serviceSelected方法。

--cshtml----------------------------

using (Ajax.BeginForm("SelectService", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "widgets", InsertionMode = InsertionMode.Replace, OnComplete = "serviceSelected" }, new { id = "selectedServiceForm" }))

--js----------------------------

function closeDialog(dialogid) {
    $('#' + dialogid).modal('hide');
    if (dialogid == 'createServiceDialog') {
        $("#selectedServiceForm").submit(); // --> /Design/SelectService --> _WidgetsPartial
        serviceSelected()
    }
}

但第二次生产的_HtmlDocument为什么没渲染到网页上还没调查出来...

CocoPage | 园豆:84 (初学一级) | 2014-06-20 11:38

--contents的cshtml----------

@{
    Layout = null;
}
@model HtmlAgilityPack.HtmlDocument
@Html.Raw(@Model.DocumentNode.OuterHtml)

CocoPage | 园豆:84 (初学一级) | 2014-06-20 12:12

@CocoPage: 这个要具体看 serviceSelected()的实现。因为提交是异步的。所以会先执行serviceSelected(),然后再执行Complete里面调用的serviceSelected()。

幻天芒 | 园豆:37207 (高人七级) | 2014-06-20 13:32

@幻天芒: 

先走的submit再走的serviceSelected吧...

function serviceSelected() {
    var url = '/Design/' + ($("#testswitch").val() ? 'TestContents/' : 'Contents/') + $('#selectedServiceId').val();
    document.getElementById('designframe').contentWindow.location.replace(url);
}

CocoPage | 园豆:84 (初学一级) | 2014-06-20 15:17

@CocoPage: 先走的是submit,不过submit触发的ajax事件,是异步的,所以会先走你写的serviceSelected,然后才是ajax的回调。

幻天芒 | 园豆:37207 (高人七级) | 2014-06-20 15:57

@幻天芒: 恩,这我知道,就是不知道Action Contents 方法返回的view为什么没有渲染成功,网页上还是第一次Action的view。继续迷茫中...

CocoPage | 园豆:84 (初学一级) | 2014-06-20 16:02

@CocoPage: 这个用Chrome看下请求就明白了。

幻天芒 | 园豆:37207 (高人七级) | 2014-06-20 16:23

@幻天芒: 

不知道contents为什么只有一个,既然Action Contents走了两边按理说应该有两个的,这个Contents出自function serviceSelected()方法

CocoPage | 园豆:84 (初学一级) | 2014-06-24 09:49

@CocoPage: 有可能视图中有@Html.Action(""),如果有这种的话,Controller中的Action也会执行的,但是不影响请求。

幻天芒 | 园豆:37207 (高人七级) | 2014-06-24 10:55
其他回答(4)
0

我遇到过你这个问题,可能是你的地址参数弄错了,我是这样的

比如?xx=123

邵明瑞 | 园豆:105 (初学一级) | 2014-06-18 18:46
0

调试下,看看执行过程

Froyo | 园豆:494 (菜鸟二级) | 2014-06-19 09:59
0

没有具体代码,实在不清楚为什么

魔沦殇 | 园豆:11 (初学一级) | 2014-06-19 11:15
0

说明的你表单提交了两遍  参见我的博客:

http://blog.sina.com.cn/s/blog_e846c5270102wcmg.html

江啊生 | 园豆:206 (菜鸟二级) | 2016-05-19 11:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册