VBNet Webforms Web服务作为Ajax中介

时间:2019-03-26 22:00:40

标签: asp.net vb.net web-services webforms

我是一名PHP / Vue.js / jQuery开发人员,刚开始一项新工作,我的首要任务是清理2009年用Visual Basic编写的Web Forms项目。听起来毫无头绪,是因为在很多方面都是如此。

我正在寻找创建一个Web服务(或其他东西)作为Web ui aspx文件与后台项目范围的VB类之间的接口。我想将JavaScript ajax请求连接到.asmx文件中的轻量级中介方法,该方法会将请求路由到进行繁重工作的各种类。我的想法是,这样我就可以以易于管理的方式将后端逻辑与前端逻辑分开,并且它们可以从我的Web服务或其他vb类接收呼叫并做出相应的响应。

我的问题是:

  1. 这是可行的/明智的方法吗?如果没有,您能告诉我我的思考过程出了什么问题吗?
  2. 如果这是可靠的,则:
    1. 我可以在多个文件之间分割Web服务吗
    2. 我应该知道什么 gotcha's 吗?

编辑:另外-只是因为我认为这将是一个更好的解决方案,并且一定会想到:我被要求不要将其移至MVC / Web API

1 个答案:

答案 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是服务器控件。