Получение пользовательского ввода с помощью ASP. NET Core MVC - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь использовать ASP. NET MVC для получения пользовательского ввода через Html.BeginForm() и отображения того, что пользователь ввел на той же странице / представлении. Проблема, с которой я сталкиваюсь, заключается в том, что после того, как пользователь нажимает кнопку отправки, данные не отображаются.

Вот как настроен мой проект, В Index.cshtml:

@model SynNetTest.Models.HomeModel
@{
    ViewData["Title"] = "Home Page";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="text-center"
    <h2>The current directory: @Model.directory</h2>
    <h3>@Model.Load()</h3>

    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
        <table cellpadding="0" cellspacing="0">
            <tr>
                <th colspan="2" align="center">Word Details</th>
            </tr>
            <tr>
                <td>Enter Word: </td>
                <td>
                    @Html.TextBoxFor(m => m.word)
                </td>
            </tr>
            <tr>
                <td></td>
                <td><input type="submit" value="Submit" /></td>
            </tr>
        </table>
    }
    <h4>The word entered: @Model.word</h4>
</div>

В HomeModel.cs:

public class HomeModel
    {
        public string directory { get; set; }
        public WordNetEngine wordNet { get; set; }
        public string word { get; set; }
        public List<SynSet> synSetList { get; set; }

        //load words to access
        public string Load()
        {
            wordNet.AddDataSource(new StreamReader(Path.Combine(directory, "data.adj")), PartOfSpeech.Adjective);
      
            wordNet.Load();
            return "Database Loaded Successfully";

        }
    }

In HomeController.cs:

    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            var home = new HomeModel()
            {
                directory = Directory.GetCurrentDirectory(),
                wordNet = new WordNetEngine(),
            };
            return View(home);
        }


        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

Я работаю с пакетом Syn.Wor dNet NuGet, чтобы попытаться получить определения слов, которые пользователь вводит для печати вне. Пока что я просто пытаюсь проверить, можно ли обработать ввод и поместить на ту же страницу / представление.

Ответы [ 2 ]

1 голос
/ 12 июля 2020

Насколько я понимаю, вы не можете просматривать данные формы в методе Home / Index. Вы можете добавить следующий код.

 [HttpPost]
 public IActionResult Index(HomeModel homeModel)
 {
            
 }

, когда пользователь нажимает кнопку отправки, он связывает все детали поля просмотра с HomeModel. Короче говоря, вам не хватало метода с [HttpPost] и привязкой модели.

Также вы можете использовать атрибут FromForm для получения данных отдельного поля. Надеюсь, это поможет.

1 голос
/ 12 июля 2020

У вас даже нет метода HttpPost, который форма отправляет обратно, определенного в вашем контроллере.

@model SynNetTest.Models.HomeModel
@{
    ViewData["Title"] = "Home Page";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="text-center"
    <h2>The current directory: @Model.directory</h2>
    <h3>@Model.Load()</h3>

    @using (Html.BeginForm("Index", "Home", FormMethod.Post))
    {
...

В контроллере вам необходимо определить версию HttpPost для / home / index:

public class HomeController : Controller
{
    // By default, this is HttpGet
    public IActionResult Index()
    {
        var home = new HomeModel()
        {
            directory = Directory.GetCurrentDirectory(),
            wordNet = new WordNetEngine(),
        };
        return View(home);
    }

    [HttpPost]
    public IActionResult Index(HomeModel model)
    {
        // This is where you handle the form submit from the form post.
        ...
    }
...

Читая ваш пример кода, я вижу и другие проблемы. Обязательно сначала прочтите документацию Microsoft: https://docs.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-3.1

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