2017-09-05 44 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" /> 
相關問題