当我执行项目并尝试访问网页AccountSettings
时,我会获得错误消息
在执行当前Web请求期间生成了一个未经治疗的例外。可以使用下面的异常堆栈跟踪来识别有关异常的原点和位置的信息。
以下是我的UserManagementController
public class UserManagementController : Controller
{
private UserDatabaseEntities db = new UserDatabaseEntities();
public ActionResult AccountSettings(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Login login = db.Logins.Find(id);
if (login == null)
{
return HttpNotFound();
}
return View(login);
}
public ActionResult AccountSettings([Bind(Include = "UserID,Password")] Login login)
{
if (ModelState.IsValid)
{
db.Entry(login).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(login);
}
}
除编辑和帐户集之外,其他每个页面都可以运行良好,但是当我拥有一个用户组时,只有管理员将能够访问编辑作为主要用户创建页面,并且帐户集将是个人对用户的个人。订购他们在后端更改密码。
这是我尝试运行页面时收到的错误消息
[模棱两可的matchException:当前对控制器类型'usermanagementController'的操作"帐户设置"请求在以下操作方法之间含糊不清: system.web.mvc.actionResult accountsettings(system.nullable`1 [system.int32])on type webSpares3.views.usermanagementController system.web.mvc.ActionResult accountsettings(webPares3.models.login)on type webspares3.views.usermanagementController]
此消息非常简单:
控制器类型上的当前对操作"帐户集"请求 " usermanagementController"在以下操作之间是模棱两可的 方法
在默认情况下,控制器操作方法使用HttpGet
,在这种情况下,AccountSettings
操作方法定义是模棱两可的,这是由于2种方法存在,并具有相同的名称和相同的HTTP方法。因此,第二个AccountSettings
控制器需要HttpPostAttribute
来消除请求:
[HttpPost]
public ActionResult AccountSettings([Bind(Include = "UserID,Password")] Login login)
{
if (ModelState.IsValid)
{
// save changes & redirect
}
return View(login);
}
请注意,当AccountSettings
直接获取方法而不提供id
参数时,它将通过此块返回http 400:
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
建议返回视图:
public ActionResult AccountSettings(int? id)
{
if (id == null)
{
return View();
}
// other logic
}
nb:使用强大的ViewModel优于BindAttribute
,因此您可以轻松控制Post方法:
模型
public class Login
{
[Required]
public string UserID { get; set; }
[Required]
public string Password { get; set; }
}
控制器
[HttpPost]
public ActionResult AccountSettings(Login login)
{
if (ModelState.IsValid)
{
// save changes & redirect
}
return View(login);
}
查看
@model Login
@Html.TextBoxFor(m => m.UserID)
@Html.ValidationMessageFor(m => m.UserID)
@Html.TextBoxFor(m => m.Password)
@Html.ValidationMessageFor(m => m.Password)
<input type="submit" value="Login" />