ASP.NET MVC нужно СУШИТЬ аналогичные действия контроллера - PullRequest
1 голос
/ 06 ноября 2019

В ASP.NET MVC у меня есть 2 действия «Вход в систему», которые делают почти одно и то же, но используют другую модель и возвращают разные представления. Как я могу убедиться, что я следую правилу СУХОГО с этими действиями?

Я попытался создать отдельную функцию, которая получает нужные мне параметры, но я не могу сделать это с другой моделью.

Вот два действия:

Public Function Login(model As AccountViewModels.InternalLoginViewModel, location As String) As ActionResult
  ...

  If ... Then
     ...
     Return View(model)
  End If

  If Not ModelState.IsValid Then
     Return View(model)
  End If
  ...
  If authenticationResult.Success Then
     ...
  ElseIf ... Then
     Dim appUser As ApplicationUser = authService.GetApplicationUser(model.EmailUsername)
    ...
  ElseIf .. Then
     Return RedirectToAction("OldAppnuserRegister", MVC_CONTROLLER_ACCOUNT, authenticationResult.OldUser.GetRouteValues(location))
  ElseIf ... Then
     Return RedirectToAction("Index", MVC_CONTROLLER_MANAGE, New With {.userKey = authService.GetApplicationUser(model.EmailUsername).Key.ToString})
  End If
  ...
  Return View(model)
End Function

---------------

Public Function RepLogin(model As RepSessionViewModels.InternalLoginViewModel, location As String) As ActionResult
  ...

  If ... Then
     ...
     Return View("~/Views/RepSession/SelectProvider.vbhtml", model)
  End If

  If Not ModelState.IsValid Then
     Return View("~/Views/RepSession/SelectProvider.vbhtml", model)
  End If
  ...
  If authenticationResult.Success Then
     ...
  ElseIf ... Then
     Dim appUser As ApplicationUser = authService.GetApplicationUser(model.Email)
    ...
  ElseIf ... Then
     Return RedirectToAction("OldRepRegister", MVC_CONTROLLER_ACCOUNT, authenticationResult.OldUser.GetRouteValues(location))
  ElseIf ... Then
     Return RedirectToAction("Index", MVC_CONTROLLER_MANAGE, New With {.userKey = authService.GetApplicationUser(model.Email).Key.ToString})
  End If
  ...
  Return View("~/Views/RepSession/SelectProvider.vbhtml", model)
End Function

Я заменил повторный код на "...", чтобы сделать его более читабельным. Вся помощь приветствуется. Спасибо.

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Непонятно, что вам нужно, основываясь на опубликованном коде.

Но если вам действительно нужны две разные модели, у вас есть разные способы сделать это, пожалуйста, обратитесь к этому посту http://www.dotnet - материал.com / учебники / САШ-MVC / путь к использованию и множеством моделей-в-зрения-в-Сеть САШ-Mvc . Если у вас остались вопросы, просто уточните различия / сходства между вашими взглядами / моделями.

По моему личному опыту, этот сценарий просто плохой дизайн, вы всегда можете иметь базовую модель, базовый вид и частичныйчтобы сделать это правильно, чтобы избежать дублирования кода.

0 голосов
/ 07 ноября 2019

Ответы, которые я получил, были направлены на проблему дизайна, и я собираюсь предположить, что это так, и нет другого способа решить мою проблему.

То, что я в итоге сделал, это сделал Модель / Действие /Посмотрите то же самое и удалите RepLogin полностью. Изменено требование пользователя от принятия только писем в RepLogin до принятия имени пользователя. Волшебные строки определяются в зависимости от логического выражения, если мы находимся в RepLogin или при обычном входе в систему.

Не идеальное решение, потому что мне пришлось изменить вещи, которые я изначально не хотел менять, но это работает.

...