在 cshtml 文件上调用 C# 函数

Call C# function on cshtml file

这些天我开始学习 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);
}

编译器说 Não é possível converter implicitamente tipo "void" em "object"。 我需要做什么才能让它发挥作用?

首先,请忘记 cshtml.cs 之类的事情。这是 Razor MVC,所以你将有一个 cshtml 混合 html 和 c#

从 c# 声明后,您可以在项目中使用任何 c# public。

假设您有一些 Class1.cs(在您的项目中)包含如下所示的方法函数 MyTask..

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

.. 然后在 your.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。 checkbox.checked 在服务器端是未知的。 c# 仅在服务器端运行.. 所以要将您的复选框和文本内容发送到服务器,您必须放置一个提交按钮和 POST 您的表单。如果这样做,您可能不需要从 cshtml !

中的任何地方调用 c#