У меня есть форма, определенная в 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 для вызова?