Обзор: в настоящее время я пытаюсь создать форму создания учетной записи. Форма отображается на другой бритвенной странице. Все работает правильно, форма отображается, отправляет данные формы контроллеру, отправляет данные классу, выполняет все действия с БД, но затем по завершении предыдущих пунктов программа пытается найти страницу «CreateAccount.something», когда все, что я хочу, это пока чтобы вернуть исходное представление при ответном вызове.

В указанном проекте форма отображается через: @RenderPage ("~ / Views / Home / AccountCreationForm.cshtml")

Форма:

@model SuperDuperProject.Models.AccountCreationModel   // AccountCreationModel is only a class file containing the necessary variables
...
@using (Html.BeginForm("CreateAccount", "Home", FormMethod.Post))
{
    <table cellpadding="0" cellspacing="0">
        ...
        @Html.TextBoxFor(m => m.name)
        ...
        <input type="submit" value="Submit"/>
    </table>
}

Файл контроллера (HomeController.cs):

    ...
    public ActionResult UserLogin()   // the page containing the form
    {
        return View();
    }

    [HttpPost]
    public ActionResult CreateAccount(AccountCreationModel ACM)
    {
        Console.WriteLine("CreateAccount within HomeController");

        Helpers.CreateAccount a = new Helpers.CreateAccount(...);
        a.AccountCreationQuery();

        return Index();   // ********** Doesn't seem to operate correctly **********
    }

Вместо того, чтобы возвращать Index () или что-то там размещенное, программа пытается найти несуществующее представление CreateAccount.

Что мне не хватает, чтобы я мог просто вернуться на нужную страницу, например на индекс?

Будем очень благодарны любой помощи.

0
Bender 2 Янв 2018 в 04:53

2 ответа

Лучший ответ
    [HttpPost]
    public ActionResult CreateAccount(AccountCreationModel ACM)
    {
        Console.WriteLine("CreateAccount within HomeController");

        Helpers.CreateAccount a = new Helpers.CreateAccount(...);
        a.AccountCreationQuery();

        return RedirectToAction("Index");
        // return Redirect("Home/Index"); alternatively can use Redirect
    }

Вы можете рассмотреть возможность использования RedirectToAction или Redirect.

RedirectToAction возвращает браузеру ответ HTTP 302, который заставляет браузер делать запрос GET для указанного действия. Redirect принимает параметр URL строкового типа и перенаправляет на указанный URL.

Прочтите этот пост для получения дополнительной информации: https://www.codeproject.com/ Статьи / 595024 / Контроллеры и действия в ASP-NET-MVC

1
woodykiddy 2 Янв 2018 в 02:18

Попробуйте этот код

 public ActionResult UserLogin()   // the page containing the form
{
    return View();
}

[HttpPost]
public ActionResult CreateAccount(AccountCreationModel ACM)
{
    Console.WriteLine("CreateAccount within HomeController");

    Helpers.CreateAccount a = new Helpers.CreateAccount(...);
    a.AccountCreationQuery();

    return View("Index");  //index is the view here. You can define the view //name which you want to return from this controller action
}

По умолчанию контроллер ищет имя представления как имя действия контроллера, поэтому он пытается найти представление CreateAccount, поскольку имя действия контроллера - CreateAccount.

1
Nishant Shrivastava 2 Янв 2018 в 02:56