在 cshtml 文件中调用 C# 函数

3

我最近开始学习asp.net,并尝试在cshtml文件中调用C#函数。

ToDoList.cshtml:

function submitClick() {
  const checkbox = document.getElementById("checkbox").checked;
  const title = document.getElementById("taskTitle").textContent;

  @Model.newTaskChecked = checkbox.checked;
  @Model.newTaskTitle = title.textContent;
  @Model.addTask();
}

ToDoList.cshtml.cs:

public void addTask()
{
  tasks.Add(this.newTaskTitle, this.newTaskChecked);
}

编译器说无法将 "void" 类型隐式转换为 "object" 类型。 我需要怎么做才能让它工作?

欢迎Ruhtra。你可以从cshtml中调用c#,但是你需要为包含addTask()函数的命名空间添加using关键字。因此,请将AddTask作为静态方法放在公共类中,在命名空间中引用该类,并在cshtml中引用该命名空间。 - Goodies
1
你有读过关于asp.net的标签信息吗?这似乎不是关于旧的asp-net技术。你是在使用带有Razor页面的asp.net core吗? - Steve
@Steve 是的,我正在使用 Razor Pages。 - Ruhtra
@Goodies 我该怎么做? - Ruhtra
1
你不能从JavaScript调用C#方法。JavaScript在客户端执行,而C#在服务器上执行。 - Silvermind
cshtml在Razor中不是javascript。我已经给出了答案。 - Goodies
1个回答

4

首先,请忘记cshtml.cs和类似的内容。这是Razor MVC,因此您将具有混合HTML和C#的cshtml文件。

从C#中,您可以使用项目中声明为public的任何C#。

假设您有一个包含名为MyTask的方法函数的Class1.cs(在您的项目中),它看起来像这样...

namespace MyNamespace
{
   public class Class1
   {
      public static bool MyTask(int x)
      { return x == 0; }
    }
}

.. 那么在你的.cshtml文件中,你可以添加一个 "using MyNamespace" 引用,或者使用完整的名称 MyTask。也许更容易解释的是,你可以将其用于测试并将某些内容放入HTML中,例如:

 @if (MyNamespace.Class1.MyTask(1))
 {
   <b>ok</b>
 } 
 else
 {
   <b>nono need 0</b>
 }

这将在浏览器中显示“nono need 0”。

编辑:您不能指望使此函数按预期工作:

 function submitClick() {
   const checkbox = document.getElementById("checkbox").checked;
   const title = document.getElementById("taskTitle").textContent;

   @Model.newTaskChecked = checkbox.checked;
   @Model.newTaskTitle = title.textContent;
   @Model.addTask();
 }

在这里,您尝试直接从Javascript向模型分配内容。复选框的选中状态在服务器端是未知的。C#仅在服务器端运行。因此,要将复选框和文本内容发送到服务器,您必须放置提交按钮并POST您的表单。如果这样做,您可能不需要从任何地方在cshtml中调用C#!


1
不,标题写的是 cshtml 而不是 javascript。 - Goodies
1
@Goodies:但他的代码有一个声明为function submitClick() { ... }的函数。那是Javascript。你可以在Javascript中引用@somethingFromC#,但Javascript不能调用C#Namespace.ClassName.StaticFunction()(或任何其他C#函数)。如果你想让你的点击在服务器上执行某些操作,你将不得不进行POST(或其他HTTP动词)回服务器。 - Flydog57
3
那么你并不是从JavaScript调用C#,而是从一个C#函数输出JavaScript代码。在这里语义很重要。 - Silvermind
1
啊,你说得对。实际上,我会在我的回答中加注释。 - Goodies
@Ruhtra:了解一下REST(和/或AJAX)。它们大致描述了客户端代码如何回调到您的控制器。 - Flydog57
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接