获取"在执行当前 Web 请求期间生成了未经处理的异常"。我的 MVC 用户管理控制器中的错误



当我执行项目并尝试访问网页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" />

最新更新