c# - 在 ASP.NET MVC 中提交表单什么都不做
问题描述
我有一个在 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 方法?
解决方案
我需要在我的操作名称前加上一个斜杠:
form.Action = "/User/ChangeExpiredPassword";
不是
form.Action = "User/ChangeExpiredPassword";
推荐阅读
- mysql - Laravel 迁移不兼容的外键
- tomcat - 使用 tomcat-for-java 插件在 vscode 中运行 war 包时发生与 `user.dir` 系统属性异常相关的权限被拒绝
- c# - Office365 SMTP 服务器替换主题中的国际字符
- c# - 如何基于单选按钮设置值
- json - 如何在没有双引号的情况下获取json中的整数值?
- python - Django密码重置页面加载问题
- sas - 另一个表中的多个计数查询
- r - 为什么我的矩阵充满了 NA,而不是循环的输出?
- javascript - 有没有办法在 RxJS / Redux-observable 中连接非 Redux 操作?
- php - PHP 脚本中的 FOREIGN KEY SQL 语法错误