Как я могу изменить значение модели при нажатии кнопки в Razor? - PullRequest
1 голос
/ 05 марта 2019

В настоящее время я работаю над проектом, в котором у меня есть две кнопки.«Вход в Windows» и «Вход в систему».Когда я нажимаю «Вход в Windows», я хочу отправить форму, а перед отправкой я хочу изменить значение свойства choosenProvider моей модели на «Windows».

Вот моя модель:

public class LogInUserViewModel
{

    public LogInUserViewModel() { }

    [Required]
    [Display(Name = "Name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }
    public string ReturnUrl { get; set; }
    public string ChoosenProvider { get; set; } = "idsrv";
}

А вот моя страница Razor:

<body>
    <div class="background">
        <div class="login-area">
            <br />
            <div class="login-title">Control Unit Registry</div>
            <br />
            @Html.ValidationSummary(true, "", new { @class = "text-warning-login" })
            <div class="holder-form-login">
                <div class="form-group">
                    <div class="text-login">
                        @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "input-name-login" } })
                            @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-warning-login" })
                        </div>
                    </div>
                </div>
                <br />
                <div class="form-group">
                    <div class="text-login">
                        @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "input-password-login" } })
                            @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-warning-login" })
                        </div>
                    </div>
                </div>
            </div>
            @Html.HiddenFor(x => x.ChoosenProvider)
            <div class="form-group">
                <div class="holder-button-login">
                    <br />
                    <input type="submit" value="Login" class="button-login" />
                </div>
            </div>
            <br />
            <br />
            <div class="form-group">
                <div class="holder-button-login">
                    <br />
                    <input type="submit" value="Windows Login" class="button-login" onclick="chooseWindowsProvider()" />
                </div>
            </div>
            <br />
            <br />
            <br />
            <br />
            <div class="link-register-login">
                <a href="register">Register</a>
            </div>

        </div>
    </div>
</body>

Это единственная страница, которая у меня есть в бритве, и она полностью сводит меня с ума.Вы можете видеть, что я сталкивался с:

@Html.HiddenFor(x => x.ChoosenProvider)

И javascript onclick(), но это не изменило значение.

Итак, чтобы подвести итог: я не знаю, как изменить choosenProviderЗначение свойства для «Windows», а затем отправить форму, по нажатию кнопки.

Любая помощь приветствуется.

1 Ответ

1 голос
/ 06 марта 2019

Хорошо, я наконец-то это выяснил, я надеюсь, что это поможет кому-то в будущем, также, пожалуйста, не думайте, что intelisense может сказать вам, что функция x или y в поле даже не существует, но они существуют.

Таким образом, решение состояло в том, что js был выполнен позже, чем submit, поэтому вам нужно сделать следующее:

  1. Измените тип кнопки на <input type="button" с type="submit"
  2. Затем вставьте следующий скрипт в конец вашего файла

<script>
    function chooseWindowsProvider() {
        document.getElementById('ChoosenProvider').value = 'Windows';
        document.getElementById('loginForm').submit();
    }
</script>

Таким образом, мы в основном отправляем форму из js, а не из кнопки, чтобы мы могли присвоить строковое значение перед отправкой.

Некоторая дополнительная информация:

 @Html.HiddenFor(x => x.ChoosenProvider)

Уже содержит идентификатор, потому что его результат HTML:

<input id="ChoosenProvider" name="ChoosenProvider" type="hidden" value="idsrv" />

И, наконец, как вы можете добавить идентификатор в форму:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "loginForm"}))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...