2017-09-05 38 views
0

当我执行我的项目,试图访问该网页AccountSettings,我得到了当前Web请求的执行过程中生成了未处理的异常错误消息获取“当前web请求的执行过程中生成了未处理的异常”。错误在我的MVC UserManagementController

。关于异常的来源和位置的信息可以使用下面的异常堆栈跟踪来标识。

下面是我对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); 
    } 
} 

代码所有其他网页运行良好,除了编辑和AccountSettings,他们的表现然而,当我有用户组只设置了管理员将能够类似的功能访问编辑作为主要用户创建页面,并AccountSettings将是个人用户,以便他们在后台更改密码。

以下是错误消息试图运行网页

[AmbiguousMatchException当我得到:行动上的控制器类型“AccountSettings”目前的请求“UserManagementController”是下面的操作方法之间暧昧: 系统.Web.Mvc.ActionResult AccountSettings(System.Nullable`1 [System.Int32])上式WebSpares3.Views.UserManagementController System.Web.Mvc.ActionResult AccountSettings(WebSpares3.Models.Login)上型WebSpares3.Views.UserManagementController]

+0

因为你的第二个'AccountSettings()'方法没有'[HttpPost]'(将来,请不要只转储你所有的代码 - 只是相关的部分) –

+0

@StephenMuecke我已经添加了Http Post但是它返回'HTTP错误400.0错误的请求' –

+0

然后,这是一个完全不同的问题:) –

回答

0

此消息是非常简单的:

行动“AccountSettings”上控制器类型 “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 GET方法直接访问而无需提供id参数,它将由该块返回HTTP 400:

if (id == null) 
{ 
    return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
} 

这是建议返回视图,而不是:

public ActionResult AccountSettings(int? id) 
{ 
    if (id == null) 
    { 
     return View(); 
    } 

    // other logic 
} 

注意:使用s trongly类型的视图模型优于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" /> 
相关问题