ASP.Net Core Web App-cshtml文件无法调用控制器方法

时间:2019-10-22 20:54:29

标签: c# asp.net-core model-view-controller asp.net-core-mvc

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

Html.BeginForm("Index", "Default", FormMethod.Get);

其中index是我的方法名称,默认是控制器,而get是不言自明的。当我右键单击“索引”并转到实现时,它将带我到控制器中的方法。但是,当我调试代码时,尽管断点显然已经到位并且调试工具选项已正确设置,但它不会进入Controller方法并转到下一行代码。

也尝试过

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

同样无法进入控制器。

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

2 个答案:

答案 0 :(得分:1)

表格

HTML <form>需要一个提交按钮(通常是一些控件)才能调用控制器动作。您的示例中的表单似乎为空。

您尚未显示控制器,但假设您想将字符串传递给控制器​​操作,也许是要进行搜索或过滤:

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" />
}

标记助手

由于您使用的是ASP.Net-Core,因此可以利用标记帮助器,该标记允许您以更类似于HTML的方式编写代码。我鼓励您阅读Tag Helpers in forms in ASP.NET Core。可以使用标签帮助程序编写以上内容的一种方法是:

<form asp-action="Index" asp-controller="Default" method="get">
    <input type="text" name="SearchTerm" />
    <button>Search</button>
</form>

ActionLink

也许您想创建一个指向Default/Index的超链接?在这种情况下,请使用@Html.ActionLink帮助器:

@Html.ActionLink("go to this link", "Index", "Default")

将创建常规锚点<a>

<a href="/Default">go to this link</a>

标记帮助程序版本

<a asp-action="Index" asp-controller="Default" >Click this link</a>

答案 1 :(得分:0)

加载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>

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);
    }
}

参考: Passing data to views