Базовое веб-приложение ASP.Net - файл cshtml не может вызывать метод контроллера - PullRequest
0 голосов
/ 22 октября 2019

Попытка вызвать метод на моем контроллере из моего файла index.cshtml.

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

Где index - это имя моего метода, default - это контроллер, а get говорит само за себя. Когда я щелкаю правой кнопкой мыши по «Index» и перехожу к реализации, это приводит меня к методу в моем контроллере. Однако, когда я отлаживаю код, он не переходит в метод Controller и переходит к следующей строке кода, несмотря на то, что точки останова, очевидно, на месте и параметры инструмента отладки установлены правильно.

Также пробовал

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

Точно так же не могу войти в контроллер.

Как правильно вызвать метод моего контроллера?

Ответы [ 2 ]

1 голос
/ 23 октября 2019

Форма

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

Tag Helpers

Поскольку вы используете ASP.Net-Core, выможет воспользоваться помощниками тегов, которые позволяют писать код более похожим на HTML образом. Я рекомендую вам прочитать Помощники тегов в формах в 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>

Tag Helper версия

<a asp-action="Index" asp-controller="Default" >Click this link</a>
0 голосов
/ 23 октября 2019

Когда вы загружаете index.cshtml, он по умолчанию входит в действие index. Вам нужно вернуть модель в вашем действии index.

Вот простая демонстрация, как показано ниже:

1.Model:

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

Ссылка: Передача данных в представления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...