簡體   English   中英

獲取“在執行當前Web請求期間生成了未處理的異常。” 我的MVC UserManagementController中的錯誤

[英]Getting 'An unhandled exception was generated during the execution of the current web request.' Error in my MVC UserManagementController

當我執行項目並嘗試訪問網頁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);
    }
}

除“編輯”和“帳戶設置”外,其他所有頁面均運行正常,但是它們執行類似的功能,但是當我設置了用戶組時,只有“管理員”才能訪問“編輯”作為主要用戶創建頁面,並且“帳戶設置”將是用戶的唯一命令更改后端的密碼。

這是我嘗試運行頁面時收到的錯誤消息

[AmbiguousMatchException:控制器類型'UserManagementController'上的當前對操作'AccountSettings'的請求在以下操作方法之間不明確:System.Web.Mvc.ActionResult AccountSettings(System.Nullable`1 [System.Int32])類型為WebSpares3.Views .UserManagementController System.Web.Mvc.ActionResult AccountSettings(WebSpares3.Models.Login),類型為WebSpares3.Views.UserManagementController]

此消息非常簡單:

在以下操作方法之間,當前對控制器類型“ UserManagementController”的操作“ AccountSettings”請求不明確

默認情況下,控制器操作方法使用HttpGet ,在這種情況下, AccountSettings操作方法定義是模棱兩可的,因為存在兩個具有相同名稱和相同HTTP方法的方法。 因此,第二個AccountSettings控制器需要HttpPostAttribute來消除請求的歧義:

[HttpPost]
public ActionResult AccountSettings([Bind(Include = "UserID,Password")] Login login)
{
   if (ModelState.IsValid)
   {
       // save changes & redirect
   }
   return View(login);
}

請注意,在不提供id參數的情況下直接訪問AccountSettings GET方法時,此塊將返回HTTP 400:

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

建議改為返回視圖:

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

    // other logic
}

注意:與BindAttribute ,首選使用強類型的viewmodel,因此您可以輕松控制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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM