C# ASP.Net核心Web应用程序-cshtml文件可以';调用控制器方法

C# ASP.Net核心Web应用程序-cshtml文件可以';调用控制器方法,c#,asp.net-core,model-view-controller,asp.net-core-mvc,C#,Asp.net Core,Model View Controller,Asp.net Core Mvc,正在尝试从index.cshtml文件调用控制器上的方法 Html.BeginForm("Index", "Default", FormMethod.Get); 其中index是我的方法名,默认值是控制器,get是自解释的。当我右键单击“Index”并转到实现时,它会将我带到控制器中的方法。然而,当我调试代码时,它不会进入控制器方法并转到下一行代码,尽管断点显然已经就位,调试工具选项设置正确 也试过 <form method="get" action='@Url.Action("Inde

正在尝试从index.cshtml文件调用控制器上的方法

Html.BeginForm("Index", "Default", FormMethod.Get);
其中index是我的方法名,默认值是控制器,get是自解释的。当我右键单击“Index”并转到实现时,它会将我带到控制器中的方法。然而,当我调试代码时,它不会进入控制器方法并转到下一行代码,尽管断点显然已经就位,调试工具选项设置正确

也试过

<form method="get" action='@Url.Action("Index", "Default")'></form>

同样不能进入控制器

如何正确调用控制器方法?

表单

HTML
在调用控制器操作之前需要一个提交按钮(通常还有一些控件)。您的示例中的表单看起来是空的

您尚未显示控制器,但假设您希望将字符串传递给控制器操作,可能是为了搜索或筛选:

public ActionResult Index(string searchTerm)
{
    // do something with parameters then return view
    return View();
}
在您看来,不是这样的:

Html.BeginForm("Index", "Default", FormMethod.Get);    // empty form
应该是这样的:

@Html.BeginForm("Index", "Default", FormMethod.Get) 
{
    // add controls here, what parameters are you passing? 
    @Html.TextBox("SearchTerm")
    <input type="submit" value="Search" />
}
这将创建一个常规锚

标记帮助程序版本

<a asp-action="Index" asp-controller="Default" >Click this link</a>
单击此链接

加载index.cshtml时,默认情况下它将进入索引操作。您需要在索引操作中返回模型

下面是一个简单的演示,如下所示:

1.型号:

public class Test
{
    public int ID { get; set; }
    public string Title { get; set; }
}
2.Index.cshtml:

@model IEnumerable<TestModel>
<h1>Index</h1>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>            
        </tr>
}
    </tbody>
</table>
@model IEnumerable
指数
@DisplayNameFor(model=>model.Name)
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.Name)
}
3.索引行动:

public class TestModelsController : Controller
{
    private readonly MyDbContext _context;

    public TestModelsController(MyDbContext context)
    {
        _context = context;
    }

    // GET: TestModels
    public async Task<IActionResult> Index()
    {
        var model = await _context.TestModel.ToListAsync();
        return View(model);
    }
}
公共类TestModelsController:控制器
{
私有只读MyDbContext\u context;
公共TestModelsController(MyDbContext上下文)
{
_上下文=上下文;
}
//获取:TestModels
公共异步任务索引()
{
var model=await_context.TestModel.ToListAsync();
返回视图(模型);
}
}
参考:

请同时发布控制器代码“调用”是什么意思?只在代码中放入
Html.BeginForm
不会执行控制器,而是在生成的Html中呈现
标记。您的意思是index.cshtml中有一个表单吗,当页面加载时,您希望在默认控制器中进行索引操作而不单击按钮?您的表单是什么样子的?您是否希望将数据传递给控制器?通过“调用”,我的意思是我希望调用控制器,因此我希望进入控制器代码@Rena是的,在页面加载时(没有用户的任何交互),我想在index.cshtml文件中放入一些代码,这些代码将进入默认控制器中的索引操作。无需向控制器传递数据。控制器将不接受任何参数。我只需要知道如何从index.cshtml调用控制器(忽略我在上面输入的所有代码,我不需要使用表单标记,我不需要提交任何数据,只需要尝试让它工作并尝试表单)。感谢非常全面的回答。是的,表单是空的,因为我只想在页面加载时调用控制器中的代码,没有启动控制器调用所需的按钮。听起来我不应该使用表单。我在cshtml文件中加入了太多的逻辑,所以我认为最好将其放在控制器后面。所以看起来形式不是我想要的,我还应该用什么?控制器将不接受任何参数,在页面上加载需要调用的控制器,并在该页面上显示来自控制器的返回数据。当有人导航到该页面时,将调用控制器中的代码。用户将浏览到页面
默认/索引
,还是从其他页面调用该页面?你只是想得到数据吗?如果是这样的话,那么听起来您可能需要研究ajax,它可以用来向控制器发送异步请求。如果没有更多的context@EloiseYes,很难说您应该做什么。用户将浏览到页面default/index,代码在index.cshtml文件中。一旦页面加载,我希望cshtml文件中的代码调用控制器(不需要用户进行交互)。控制器将不接受任何参数。然后,控制器将使用entity framework获取一些数据,然后将数据返回到index.cshtml,以便向用户显示。
public class Test
{
    public int ID { get; set; }
    public string Title { get; set; }
}
@model IEnumerable<TestModel>
<h1>Index</h1>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Name)
            </th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>            
        </tr>
}
    </tbody>
</table>
public class TestModelsController : Controller
{
    private readonly MyDbContext _context;

    public TestModelsController(MyDbContext context)
    {
        _context = context;
    }

    // GET: TestModels
    public async Task<IActionResult> Index()
    {
        var model = await _context.TestModel.ToListAsync();
        return View(model);
    }
}