我是一名PHP / Vue.js / jQuery开发人员,刚开始一项新工作,我的首要任务是清理2009年用Visual Basic编写的Web Forms项目。听起来毫无头绪,是因为在很多方面都是如此。
我正在寻找创建一个Web服务(或其他东西)作为Web ui aspx
文件与后台项目范围的VB类之间的接口。我想将JavaScript ajax请求连接到.asmx
文件中的轻量级中介方法,该方法会将请求路由到进行繁重工作的各种类。我的想法是,这样我就可以以易于管理的方式将后端逻辑与前端逻辑分开,并且它们可以从我的Web服务或其他vb类接收呼叫并做出相应的响应。
我的问题是:
编辑:另外-只是因为我认为这将是一个更好的解决方案,并且一定会想到:我被要求不要将其移至MVC / Web API
答案 0 :(得分:1)
WebForm的前端和项目范围文件之间的接口具有代码隐藏文件,这种想法在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是服务器控件。