Отправка формы в ASP. NET MVC ничего не делает - PullRequest
0 голосов
/ 18 марта 2020

У меня есть форма, определенная в ASP. NET MVC, которая при отправке абсолютно ничего не делает. У меня есть метод контроллера, настроенный для его обработки, но по какой-то причине метод никогда не вызывается при отправке формы.

Форма определена в C# коде с использованием IHtmlMarkupWriter производных классов, таких как LayoutRow и TextBox:

/// <summary>
/// Allows the user to change their password when it is expired.
/// </summary>
/// <returns></returns>
[HttpGet]
public ActionResult ChangeExpiredPassword()
{
    ActionResult actionResult = null;

    try
    {
        ContentViewModel viewModel = new ContentViewModel();

        Form form = new Form();
        form.Method = FormMethod.Post;
        form.Action = "User/ChangeExpiredPassword";

        ValidationSummary summary = new ValidationSummary();
        form.Add(summary);

        GroupBox container = new GroupBox("Change Expired Password");

        LayoutRow rowOldPassword = new LayoutRow();
        var txtOldPassword = new TextBox();
        txtOldPassword.Type = TextBoxType.Password;
        txtOldPassword.Label = "Old Password";
        txtOldPassword.ID = txtOldPassword.Name = "oldPassword";
        rowOldPassword.Add(txtOldPassword);
        container.Add(rowOldPassword);

        LayoutRow rowNewPassword = new LayoutRow();
        var txtNewPassword = new TextBox();
        txtNewPassword.Type = TextBoxType.Password;
        txtNewPassword.Label = "New Password";
        txtNewPassword.ID = txtOldPassword.Name = "oldPassword";
        rowNewPassword.Add(txtNewPassword);
        container.Add(rowNewPassword);

        LayoutRow rowConfirm = new LayoutRow();
        var txtConfirm = new TextBox();
        txtConfirm.Type = TextBoxType.Password;
        txtConfirm.Label = "Confirm New Password";
        txtConfirm.ID = txtConfirm.Name = "confirm";
        rowConfirm.Add(txtConfirm);
        container.Add(rowConfirm);

        LayoutRow row2 = new LayoutRow();

        SubmitButton submit = new SubmitButton();
        row2.Add(submit);

        ResetButton reset = new ResetButton();
        row2.Add(reset);

        container.Add(row2);

        LayoutRow row3 = new LayoutRow();
        container.Add(row3);
        row3.Add(CreateReturnToLoginControl());

        form.Add(container);

        viewModel.ContentControls.Add(form);

        actionResult = View(viewModel);
    }
    catch (Exception ex)
    {
        HandleException(ex);
        actionResult = Error();
    }

    return actionResult;
}

И обработчик настроен так:

[HttpPost]
[SupportedBehaviors(BehaviorName.ChangeMyPassword)]
public ActionResult ChangeExpiredPassword(ChangeMyPasswordModel model)
{
    ActionResult actionResult = null;
    JsonResponse response = null;

    try
    {
        IBehaviorProvider<IChangeMyPasswordModel> provider = new ChangeMyPasswordBehaviorProvider();
        var result = provider.Handle(model);

        string xml = String.Format("<Data><OldPassword>{0}</OldPassword><NewPassword>{1}</NewPassword></Data>", model.OldPassword, model.NewPassword);
        LogSecurityEvent(SecurityLogType.InvokedChangeMyPassword);

        response = new JsonResponse(result.Successful, result.Message);
    }
    catch (Exception ex)
    {
        response = new JsonResponse(false, ex.Message);
    }

    actionResult = Json(response);

    return actionResult;
}

Первый метод вызывается при переходе к действию ChangeExpiredPassword, но когда я отправляю форму, ничего не происходит; второй метод не вызывается. Что здесь может происходить? Как я могу получить метод POST для вызова?

1 Ответ

0 голосов
/ 18 марта 2020

Мне нужно было sla sh перед названием моего действия:

form.Action = "/User/ChangeExpiredPassword";

not

form.Action = "User/ChangeExpiredPassword";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...