Treat it as a string by default and try parsing it as an integer. If the parse fails, then it's not a number and you can treat it as a city.
public ActionResult Search(string search)
{
int zipCode;
if(int.TryParse(search, out zipCode)
{
// It's a zip code and you can use the zipCode variable
}
else
{
// Not a number, must be a city. You can use the search variable.
}
}