是否可以在没有视图状态和回发的情况下使用 asp.net 网络表单
Is it possible to use asp.net web forms without viewstate and postbacks
可能标题不够清楚。
我必须使用 asp.net 网络表单,这是一项要求,对此我无能为力。
我想避免服务器控件(如网格、下拉列表等)
我想对大多数操作使用 ajax,并使用 angular 或淘汰赛之类的前端。
我想为所有后端操作构建一个 web api 项目。
因此视图背后的代码将是最少的,web api 将是核心操作处理程序。
我需要回答这个问题的是关于架构的。
这是我打算用自然的方式制作应用程序吗?
或者这是完全错误的做事方式?
如果我没理解错的话,你想实现类似 SPA (https://en.wikipedia.org/wiki/Single-page_application) 的东西。
没错,您不需要 ASP.NET Web 表单(恕我直言,这太过分了)。更好的方法是使用 ASP.NET WebAPI 和一些视图引擎(如 Razor)来呈现页面(如果需要的话)。
毕竟:您写道,您必须使用 ASP.NET Web 表单,并且...
是的,可以使用 asp.net 没有视图状态和回发的网络表单(你只是不使用它,或者用它来呈现主页(索引)页面,好吗?)。
更重要的是,您可以在单个项目中同时使用 Controller 和 ApiController 继承者,但是您必须像这样为您的 API 添加路由(将其添加到 Application_Start方法):
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
你绝对可以 asp.net 没有视图状态和回调。我为此创建了一个大型数据库应用程序。 None 我的下拉菜单、链接等导致 post 返回服务器(通过在所有链接上返回 "false" 来完成,确保 "auto postbacks" 设置为 false,等等。您不会从 gridView 控件中获得太多(如果有的话)功能,因为对于分页,它会返回到服务器。您必须编写自己的分页/滚动,但您可以在 WO 上找到相关示例。
我做 大量使用后面的代码填写初始加载的表单。对于填充数据、格式化文本框、分配样式等,"load" 和 "init" 事件效果很好,我喜欢能够在后面的代码中使用 "this.textbox"。通过这种方式,我可以将页面上的 HTML 保持在非常有限的范围内——后面的代码会完成所有繁重的页面格式化工作。
我在前端使用 JQuery 和 JQuery UI 作为对话框、选项卡等。我选择它是因为它轻巧、易于使用且无处不在。我们的许多数据库更新都是单击网格中的元素、弹出并阻止对话框、使用 ajax 检索数据、填充框、取消阻止对话框。
经过大量的反复试验,我删除了所有我不喜欢的 webforms 部分(主要是视图状态和完整的 post 返回事件模型)并保留了我喜欢的部分很多(管理加载页面的代码)。
最后 -- 我确实不喜欢更新面板。它们的前景很好——但是让它们在没有愚蠢的工件的情况下工作是一个挑战,而且它们不能很好地与 jQuery UI 集成。由于您将进入 limit/eliminate postbacks/view 状态,因此无论如何您都不会使用它们。
可能标题不够清楚。 我必须使用 asp.net 网络表单,这是一项要求,对此我无能为力。 我想避免服务器控件(如网格、下拉列表等) 我想对大多数操作使用 ajax,并使用 angular 或淘汰赛之类的前端。 我想为所有后端操作构建一个 web api 项目。 因此视图背后的代码将是最少的,web api 将是核心操作处理程序。 我需要回答这个问题的是关于架构的。 这是我打算用自然的方式制作应用程序吗? 或者这是完全错误的做事方式?
如果我没理解错的话,你想实现类似 SPA (https://en.wikipedia.org/wiki/Single-page_application) 的东西。
没错,您不需要 ASP.NET Web 表单(恕我直言,这太过分了)。更好的方法是使用 ASP.NET WebAPI 和一些视图引擎(如 Razor)来呈现页面(如果需要的话)。
毕竟:您写道,您必须使用 ASP.NET Web 表单,并且... 是的,可以使用 asp.net 没有视图状态和回发的网络表单(你只是不使用它,或者用它来呈现主页(索引)页面,好吗?)。
更重要的是,您可以在单个项目中同时使用 Controller 和 ApiController 继承者,但是您必须像这样为您的 API 添加路由(将其添加到 Application_Start方法):
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
你绝对可以 asp.net 没有视图状态和回调。我为此创建了一个大型数据库应用程序。 None 我的下拉菜单、链接等导致 post 返回服务器(通过在所有链接上返回 "false" 来完成,确保 "auto postbacks" 设置为 false,等等。您不会从 gridView 控件中获得太多(如果有的话)功能,因为对于分页,它会返回到服务器。您必须编写自己的分页/滚动,但您可以在 WO 上找到相关示例。
我做 大量使用后面的代码填写初始加载的表单。对于填充数据、格式化文本框、分配样式等,"load" 和 "init" 事件效果很好,我喜欢能够在后面的代码中使用 "this.textbox"。通过这种方式,我可以将页面上的 HTML 保持在非常有限的范围内——后面的代码会完成所有繁重的页面格式化工作。
我在前端使用 JQuery 和 JQuery UI 作为对话框、选项卡等。我选择它是因为它轻巧、易于使用且无处不在。我们的许多数据库更新都是单击网格中的元素、弹出并阻止对话框、使用 ajax 检索数据、填充框、取消阻止对话框。
经过大量的反复试验,我删除了所有我不喜欢的 webforms 部分(主要是视图状态和完整的 post 返回事件模型)并保留了我喜欢的部分很多(管理加载页面的代码)。
最后 -- 我确实不喜欢更新面板。它们的前景很好——但是让它们在没有愚蠢的工件的情况下工作是一个挑战,而且它们不能很好地与 jQuery UI 集成。由于您将进入 limit/eliminate postbacks/view 状态,因此无论如何您都不会使用它们。