[英]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.