Чтобы ответить на другую половину вопроса, вы можете вызвать:
return PartialView("viewname");
, когда вы хотите вернуть частичный HTML. Вам просто нужно найти способ решить, хочет ли запрос JSON или HTML, возможно, на основе URL-адреса / параметра.