You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:23:14