ASP. NET MVC Базовая модель передачи событий TextBoxFor от View к Controller - PullRequest
0 голосов
/ 15 апреля 2020

Чтобы быть в авангарде, моя карьера в основном была бэк-эндом C# Работа и ничего на переднем крае, поэтому мои знания по всем вещам на переднем крае очень ограничены. везде ищет способ передачи модели из вида в контроллер при нажатии клавиши ввода в текстовом поле. Я посмотрел на ajax и js, но ни один пример не показал мне, как пройти в модели. Я подошел ближе, и в результате в методе действия контроллера модель была нулевой. В качестве примера нижеприведенного кода я хотел бы иметь событие в текстовом поле Zip, когда кто-то нажимает клавишу Enter, когда фокус находится в указанном текстовом поле, он передает Модель, содержащую все значения, в действие контроллера GotZip.

Любая помощь будет принята с благодарностью!

Помоги мне, Оби-Ван Кеноби, ты моя единственная надежда ...

Index.cs html

@model MyProject.Models.MyModel
@{
    ViewBag.Title = "MyApp";
}

<div class="text-left">
    <form asp-controller="Home" asp-action="Index">
        <table>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Name)
                    @Html.TextBoxForFor(model => model.Name)
                </th>               
            </tr>
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Address1)
                    @Html.TextBoxForFor(model => model.Address1)
                </th>               
            </tr>           
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.City)
                    @Html.TextBoxForFor(model => model.City)
                </th>               
            </tr>   
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.State)
                    @Html.TextBoxForFor(model => model.State)
                </th>               
            </tr>   
            <tr>
                <th>
                    @Html.DisplayNameFor(model => model.Zip)
                    @Html.TextBoxForFor(model => model.Zip)
                </th>               
            </tr>               
        </table>
        <input name="Submit" type="submit" asp-action="SubmitButton" value="Submit" />      
    </form>
</div>

MyModel.cs

namespace MyProject.Models
{
    public class MyModel
    {
        public string Name { get; set; }
        public string Address1 { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string Zip { get; set; }
    }
}

HomeController.cs

namespace MyProject.Controllers
{
    [Authorize]
    public class HomeController : Controller
    {
        public IActionResult SubmitButton([FromForm] MyModel model)
        {
            //do stuff with model

            ModelState.Clear();

            return View("Index", myModel);
        }

        public IActionResult GotZip([FromForm] MyModel model)
        {
            //do stuff with model

            ModelState.Clear();

            return View("Index", myModel);
        }

    }
}

1 Ответ

0 голосов
/ 15 апреля 2020

как передать модель из вида в контроллер при нажатии клавиши ввода в текстовом поле.

Я хотел бы иметь событие в текстовом поле Zip, когда кто-то нажимает Enter Когда фокус находится в указанном текстовом поле, он передает Модель, содержащую все значения, в действие контроллера GotZip

Ваше действие GotZip возвращает ViewResult, если вы хотите отобразить представление в браузере клиента, пока пользователь нажимает клавишу Enter в текстовом поле, вы можете попробовать использовать скрытую кнопку отправки и вручную запустить ее для отправки данных ожидаемым действиям, как показано ниже.

    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Zip)
            @Html.TextBoxFor(model => model.Zip, new { @onkeydown = "return myfunc(event);" })
        </th>
    </tr>
</table>
<input name="Submit" type="submit" asp-action="SubmitButton" value="Submit" />
<input id="SubmitToGotZip" type="submit" asp-action="GotZip" value="Submit" style="display:none;" />

JS function

function myfunc(e) {
    if (e.which == 13) {

        $("#SubmitToGotZip").click();

        return false;
    }
    return true;
}

Я смотрел на ajax и js, но ни один пример не показал мне, как передать модель.

Если вы хотите отправить данные формы через ajax, вы можете попробовать:

function myfunc(e) {
    if (e.which == 13) {
        var form = new FormData($('form')[0]);

        $.ajax({
            type: 'POST',
            url: '/home/GotZip',
            data: form,
            processData: false,
            contentType: false,
            success: function (result) {

                //code logic here
            },
            error: function () {
                console.log('error');
            }
        });

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