问题: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)
需要确认下问题,这点代码完全看不出走两次的情况。
皇天不负有心人,走两次的原因查出来了,问题算是解决了。是因为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为什么没渲染到网页上还没调查出来...
--contents的cshtml----------
@{
Layout = null;
}
@model HtmlAgilityPack.HtmlDocument
@Html.Raw(@Model.DocumentNode.OuterHtml)
@CocoPage: 这个要具体看 serviceSelected()的实现。因为提交是异步的。所以会先执行serviceSelected(),然后再执行Complete里面调用的serviceSelected()。
@幻天芒:
先走的submit再走的serviceSelected吧...
function serviceSelected() {
var url = '/Design/' + ($("#testswitch").val() ? 'TestContents/' : 'Contents/') + $('#selectedServiceId').val();
document.getElementById('designframe').contentWindow.location.replace(url);
}
@CocoPage: 先走的是submit,不过submit触发的ajax事件,是异步的,所以会先走你写的serviceSelected,然后才是ajax的回调。
@幻天芒: 恩,这我知道,就是不知道Action Contents 方法返回的view为什么没有渲染成功,网页上还是第一次Action的view。继续迷茫中...
@CocoPage: 这个用Chrome看下请求就明白了。
@幻天芒:
不知道contents为什么只有一个,既然Action Contents走了两边按理说应该有两个的,这个Contents出自function serviceSelected()方法
@CocoPage: 有可能视图中有@Html.Action(""),如果有这种的话,Controller中的Action也会执行的,但是不影响请求。
我遇到过你这个问题,可能是你的地址参数弄错了,我是这样的
比如?xx=123
调试下,看看执行过程
没有具体代码,实在不清楚为什么
说明的你表单提交了两遍 参见我的博客:
http://blog.sina.com.cn/s/blog_e846c5270102wcmg.html