C# 角度模板和.NET部分回发
我很难使用.Net部分回发 问题与此基本相同: 基本上我有一个标签,上面有angular应用程序,然后我有第二个标签,上面有一些c#控件,我必须在标签之间做部分回发,当我回到我的应用程序时,什么都没有 我尝试了使用ngView进行路由,然后我尝试了C# 角度模板和.NET部分回发,c#,javascript,asp.net,angularjs,partial-postback,C#,Javascript,Asp.net,Angularjs,Partial Postback,我很难使用.Net部分回发 问题与此基本相同: 基本上我有一个标签,上面有angular应用程序,然后我有第二个标签,上面有一些c#控件,我必须在标签之间做部分回发,当我回到我的应用程序时,什么都没有 我尝试了使用ngView进行路由,然后我尝试了$route.reload()(它转到控制器,我可以看到模板正在下拉,但页面上的结果是无)。然后我尝试编译(templateCache.get(lazyTableControllerRoute.current.templateUrl))(范围),如前所
$route.reload()
(它转到控制器,我可以看到模板正在下拉,但页面上的结果是无)。然后我尝试编译(templateCache.get(lazyTableControllerRoute.current.templateUrl))(范围),如前所述。没什么
请帮忙:)
每次回发后,我都会在页面上显示以下html:
LiteralControl lazyControl = new LiteralControl("<div ng-app=\"LazyLoadingApp\" style=\"padding:10px\" ng-controller=\"LazyTableController\" ng-view><lazy-table> </lazy-table></div>");
Controls.Add(lazyControl);
更新:
var app = angular.module('LazyLoadingApp', ['ui.bootstrap', 'ngRoute']);
jQuery(document).ready(function ($) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
function EndRequestHandler(sender, args) {
jQuery('#parent').children().remove();
jQuery('#parent').append('<div id="boodstapped" ng-view ></div>');
angular.bootstrap(jQuery('#boodstapped'), ['LazyLoadingApp']);
}
prm.add_endRequest(EndRequestHandler);
});
我正在尝试require.js。。(同样,它在满页加载后工作。)我的想法是在部分回发后引导元素。
我构建了一个简单的测试用例,在我的应用程序的更新面板中有一个简单的按钮,只是进行了部分回发。单击后(当应用程序消失时),我在控制台中尝试:
angular.bootstrap(document, ['LazyLoadingApp'])
但后来我发现了一个我无法消除的错误:
App Already Bootstrapped with this Element 'document'
以下是require.js方式的应用程序(但请记住,这只是为了代码审查的目的而已)- 不要同时使用ng应用程序和angular.bootstrap
- 您是否编译了“ng应用程序”,如果是,请不要编译
好的!问题解决了。。因此,为了处理部分回发,您需要: 这样定义应用程序:(请记住,您必须从html中删除ng应用程序!)
更多信息。尽管其他答案可能有用,但我发现最好的做法是尽量不要处于.net控件和角度控件的“混合”状态,这取决于两者之间的交互
这个过程充其量是没有记录的。。。你最终会写很多代码来适应简单的事情
我不建议长时间执行以下操作,只建议将其作为临时/过渡解决方案,我知道这可能无法解决所有情况。。。。但请注意,您始终可以从dot.net端攻击此问题,如下所示,并重定向回您所在的页面
protected void cbChecked_My_DotNet_CallBack(object sender, EventArgs e)
{
DoDotNetStuff();
if(NeedToSignalToAngular){
response.redirect(yourpage.aspx?yourparams=xxx)
}
}
谢谢你的回答。我没有在一起使用它,当我尝试“require.js方式”时,我确实删除了ng应用程序标签。lazycontrol是如何使用的?为什么它包含ng应用程序?你们可以在这里看到lazycontrol包含ng应用程序,因为这是我的第一个方法-正常角度注入。请不要将“更新”上面的代码与更新本身连接起来,因为我对require.js做了一些更改-例如从页面中删除ng应用程序并添加ngview..给你,但请记住它在plunker上不起作用:)我不知道如何在那里模拟部分回发。。并创建一个可用的ashx服务。。上面的plunker适用于更新后的我的版本,所以使用require.js方式。
var app = angular.module('LazyLoadingApp', ['ui.bootstrap', 'ngRoute']);
jQuery(document).ready(function ($) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
function EndRequestHandler(sender, args) {
jQuery('#parent').children().remove();
jQuery('#parent').append('<div id="boodstapped" ng-view ></div>');
angular.bootstrap(jQuery('#boodstapped'), ['LazyLoadingApp']);
}
prm.add_endRequest(EndRequestHandler);
});
protected void cbChecked_My_DotNet_CallBack(object sender, EventArgs e)
{
DoDotNetStuff();
if(NeedToSignalToAngular){
response.redirect(yourpage.aspx?yourparams=xxx)
}
}