Make sure you have set the dlls in visual studio as "copy local to false" in their properties to avoid errors as given in the following official Sitecore documentation :
https://doc.sitecore.com/developers/93/sitecore-experience-manager/en/set-up-sitecore-and-visual-studio-for-development.html
Also, make sure your controller is having a parameterless constructor like below
public MyController()
{
//stuff
}
EDIT :
(Tip)
If incase your site crashes - you dont have any solution/fixes and you don't have backup, you can still find the entire folders and files of a vanilla Sitecore instance inside the installation zip file (Sitecore 9.3.0 rev. 003498 (OnPrem)_single.scwdp.zip/Content/Website). You need not install a new Sitecore instance again.. :)
Specifically, set the copy local to false for System.Web.Mvc.dll besides the regular dlls such as Sitecore.Kernel, Sitecore.Mvc, Sitecore.Mvc.Analytics
Basically, if it is a dll version mismatch after deploy/publish to your webroot folder, then you would get error message such as
Could not load file or assembly 'System.Web.Mvc'...