Я пытаюсь реализовать удобные для пользователя URL-адреса, сохраняя при этом существующие маршруты, и смог сделать это с помощью тега ActionName поверх моего контроллера ( Можно ли перегрузить методы контроллера в ASP.NET MVC? )
У меня есть 2 контроллера:
ActionName("UserFriendlyProjectIndex")]
public ActionResult Index(string projectName) { ... }
public ActionResult Index(long id) { ... }
По сути, я пытаюсь сохранить удобный для пользователя URL в базе данных для каждого проекта.
Если пользователь вводит URL / Project / TopSecretProject / , вызывается действие UserFriendlyProjectIndex . Я выполняю поиск в базе данных и, если все получится, я хочу применить ту же логику, которая используется в действии Index.
Я в основном пытаюсь избежать написания дублирующего кода. Я знаю, что могу разделить общую логику на другой метод, но я хотел посмотреть, есть ли встроенный способ сделать это в ASP.NET MVC.
Есть предложения?
Я попробовал следующее, и я вижу сообщение об ошибке «Не удается найти»:
[ActionName("UserFriendlyProjectIndex")]
public ActionResult Index(string projectName)
{
var filteredProjectName = projectName.EscapeString().Trim();
if (string.IsNullOrEmpty(filteredProjectName))
return RedirectToAction("PageNotFound", "Error");
using (var db = new PIMPEntities())
{
var project = db.Project.Where(p => p.UserFriendlyUrl == filteredProjectName).FirstOrDefault();
if (project == null)
return RedirectToAction("PageNotFound", "Error");
return View(Index(project.ProjectId));
}
}
Вот сообщение об ошибке:
The view 'UserFriendlyProjectIndex' or its master could not be found. The following locations were searched:
~/Views/Project/UserFriendlyProjectIndex.aspx
~/Views/Project/UserFriendlyProjectIndex.ascx
~/Views/Shared/UserFriendlyProjectIndex.aspx
~/Views/Shared/UserFriendlyProjectIndex.ascx
Project\UserFriendlyProjectIndex.spark
Shared\UserFriendlyProjectIndex.spark
Я использую SparkViewEngine в качестве движка просмотра и LINQ-to-Entities, если это поможет.
спасибо!