簡體   English   中英

使用ASP.NET MVC將ActionResults創建和編輯合並為一個

[英]Merging Create and Edit ActionResults into one using ASP.NET MVC

我目前有4種動作方法:

UserCreate - 獲取
UserCreate - 發布

UserEdit - 獲取
UserEdit - 發布

我的目標是以某種方式將它們組合起來只做UserEdit。 兩者之間的唯一區別是UserCreate在表單中要求輸入Password和ConfirmPassword。 UserEdit沒有。 我最終必須為此創建2個單獨的ViewModel:UserCreateViewModel,UserEditViewModel。

// GET: Users/Create
[Route("users/create")]
public IActionResult UserCreate()
{
    return View();
}

// POST: Users/Create
[Route("users/create")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UserCreate(UserCreateViewModel vm)
{        
}

// GET: Users/Edit/5
[Route("users/edit/{id}")]
public async Task<IActionResult> UserEdit(string id)
{
    return View(vm);
}

// POST: Users/Edit/5
[Route("users/edit/{id}")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UserEdit(UserEditViewModel vm)
{
    return View(vm);
}

如果將它們保持分離是更好的,更好的MVC約定,但我只是想確保沒有我沒有使用的MVC的某些功能可以幫助我只有2個Action方法,一個視圖模型。

將它們分開。 你不會錯過MVC中任何可以解決這個問題的事情。 當然你可以使它工作但它偏離了常見的api實現,以便認為它們是類似的行為。 如果感覺非常糟糕,你可以在頁面和服務器端使用相同的視圖模型和代碼驗證(你不能依賴它在模型上,因為驗證現在需要兩個場景用於一個模型)但是如果它也分成了二。 它更清潔。

是的,你肯定只有2個使用mvc功能的方法:

您可以創建一種方法來為GET類型創建或編輯用戶

[HttpGet]
[Route("users/useraddoredit/{id?}")]
public async Task<IActionResult> UserEdit(string id)
{
  if(string.isNullorEmpty(id))
  {
    return View();
  }
  return View(vm);
}

您可以為POST類型創建方法。 這里創建一個具有所有屬性的新模型UserViewModel。

[Route("users/edit/{id}/{isUserEdit?}")]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> UserEdit(UserViewModel vm, bool isUserEdit)
{
    if(isUserEdit)
    {
       return View(vm);
    }    
    else
    {
        //logic for add user
    }
}

PS:但不推薦使用這種方法。

暫無
暫無

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

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