我是一名PHP/Vue.js/jQuery开发人员,他刚刚开始了一项新工作,我的第一项任务是清理2009年用Visual编写的Web窗体项目。如果这听起来毫无头绪,那是因为在很多方面都是如此。
我希望创建一个web服务(或其他什么),作为web ui aspx文件和背景中的项目作用域VB类之间的接口。我希望让javascript ajax请求连接到.asmx文件中的轻量级中间方法,这些方法将把请求路由到执行繁重任务的各个类。我的想法是,这样我就可以以一种易于管理的方式将后端逻辑与前端逻辑分开,它们可以接收来自我的web服务或来自不同vb类的呼叫,并相应地做出响应。
我的问题是:
编辑:也因为我相信这是一个更好的解决方案,而且肯定会被考虑到的:我被要求不要把它转移到MVC/Web
发布于 2019-03-27 03:35:00
WebForms拥有前端和项目范围文件之间的代码隐藏文件,其思想是用于UI的aspx,对业务层进行代码隐藏,然后调用进一步的业务层或数据层。
另外,不要忘记,对于WebForms来说,标准行为是在表单控件提交时将页面发回给自己。改变这种行为可能会使以后的修改/维护变得更加困难,因为某些部分将使用新的处理程序/AJAX调用模型,而其他部分则使用回发模式和代码隐藏页面。
最终,你所描述的东西并没有本质上的问题。它仍然是一个可行的范例,它只是没有利用WebForms的好处,而您仍然受到它们的缺点的限制。
也就是说,我可能不会将ASMX文件用于您正在尝试的内容。ASMX是'WebServices‘,它们默认为SOAP和“WebMethods”。
如果在AJAX调用中使用ASHX (泛型处理程序),您可能会有更好的体验。ASHX将返回您告诉它的任何内容,并且没有真正的“默认”行为。因此,您可以很容易地让它们使用JSON或XML进行响应。
根据您之前的经验,我猜测会抓住您的最大问题是,默认情况下,WebForms会根据需要根据控件的父级更改服务器控件的ID。
所以,如果你有以下任何一个:
<asp:textbox runat="server" id="txtFoo" />
<input type="text" runat="server" id="txtBar" />它们不会找到DOM元素
$("#txtFoo").on("change", function() {alert('hi');});
$("#txtBar").on("change", function() {alert('hi');});但这些会
$("#<% Response.Write(txtFoo.ClientId)%>").on("change", function() {alert('hi');});
$("#<% Response.Write(txtBar.ClientId)%>").on("change", function() {alert('hi');});更让人困惑的是,如果你有这个:
<input type="text" id="txtFooBar" />然后它会找到一个DOM元素
$("#txtFooBar").on("change", function() {alert('hi');});原因是txtFooBar不是服务器控件,而txtFoo和txtBar是服务器控件。
https://stackoverflow.com/questions/55366804
复制相似问题