C# 角度模板和.NET部分回发

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))(范围),如前所

我很难使用.Net部分回发

问题与此基本相同:

基本上我有一个标签,上面有angular应用程序,然后我有第二个标签,上面有一些c#控件,我必须在标签之间做部分回发,当我回到我的应用程序时,什么都没有

我尝试了使用ngView进行路由,然后我尝试了
$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)     
             }
         }