Visual Studio 2019中基于Visual Basic与MVC实现按钮调用方法的无响应问题排查
排查MVC按钮点击无响应问题
让我帮你一步步排查这个按钮点击没反应的问题,先从视图和控制器里的几个关键错误说起:
视图代码里的核心问题
- Url.Action参数顺序搞反了:
Url.Action的正确用法是第一个参数是动作方法名,第二个是控制器名(不带Controller后缀),你写反成Url.Action("OPenCaseController", "init"),这会生成错误的路由,导致点击后找不到正确的后端方法。 - 按钮类型和提交逻辑冲突:你用了
type="button"的按钮,同时又套在form标签里。如果想用form的POST提交,按钮应该改成type="submit";如果想用onclick跳转,那form标签其实没必要,而且要确保Url.Action生成正确的地址。 - form的action属性值不对:你的控制器里给POST方法加了
ActionName("OPEN"),所以form的action应该指向这个动作名,或者用Url.Action生成正确的路径。
控制器代码里的问题
- 参数未指定类型:POST版本的
init方法参数x没有声明类型,MVC无法正确进行参数绑定,应该加上类型(比如x As String)。 - 中文引号导致编译错误:
CreateObject(“HYSYS.Application”)和hyApp.SimulationCases.Open(“E:\otts\st st trial-reem.hsc”)里用了中文双引号,这会直接导致代码编译失败,必须改成英文双引号。 - 类级变量的潜在问题:
hyApp和hyCase是类的成员变量,多次调用方法可能会导致资源泄漏,建议在方法内部声明并使用,或者用完后释放资源。
修改后的视图代码
@Code Layout = Nothing End Code <!DOCTYPE html> <html> <head> <meta name = "viewport" content="width=device-width" /> <title>init</title> </head> <body> <div class="form-group"> <!-- 用form POST提交,按钮改成submit,action用Url.Action生成正确路径 --> <form method="post" action="@Url.Action("OPEN", "OPenCase")"> <button type="submit">OPENhysys</button> <input type="text" name="x" /> </form> </div> </body> </html>
修改后的控制器代码
Imports System.Web.Mvc Imports Aspentech Imports Aspentech.HYSYS Namespace Controllers Public Class OPenCaseController Inherits Mvc.Controller ' 把类级变量移到方法内部,避免重复实例化问题 Function init() As ActionResult ViewData("Message") = "Your contact page." Return View() End Function <HttpPost()> <ActionName("OPEN")> Public Function init(x As String) As ActionResult ViewData("Message") = "Your contact page." Dim hyApp As Aspentech.HYSYS.Application = CreateObject("HYSYS.Application") Dim hyCase As SimulationCase = hyApp.SimulationCases.Open("E:\otts\st st trial-reem.hsc") hyCase.Activate() ' 记得用完后释放资源,避免内存泄漏 ' System.Runtime.InteropServices.Marshal.ReleaseComObject(hyCase) ' System.Runtime.InteropServices.Marshal.ReleaseComObject(hyApp) Return View() End Function End Class End Namespace
这样修改后,按钮点击应该能正确触发后端的POST方法了。另外注意:如果你的HYSYS组件需要特定的权限或者运行环境,还要确保应用池的身份有足够的权限访问指定的HSC文件哦。
内容的提问来源于stack exchange,提问作者Reem Elshenawy
相关产品推荐
相关产品推荐

