MVC: действия, которые не существуют - PullRequest
1 голос
/ 13 января 2010

Я не сделал много MVC и все еще изучаю трудный путь, как делать вещи.

MVC 1 и C #

Проблема Я хочу предоставить клиенту ссылку, например, www.temp.com/redirects/cust100?id=123&url=www.nothere.com

.

с URL, который я знаю, он перейдет к контроллеру "перенаправлений", но нет действия "cust100". Как мне создать ActionResult (или что-то еще), который будет захватывать действие, чтобы я мог запросить его у БД, чтобы проверить его действительность, прежде чем перенаправлять их где-нибудь еще на моем сайте?

Если я объяснил myselft слишком хорошо, пожалуйста, не стесняйтесь задавать больше вопросов.

С уважением, Пит

Ответы [ 4 ]

3 голосов
/ 13 января 2010

Ваш маршрут:

routes.MapRoute("Redirects",               
               "{controller}/{cust}",
                new {controller = "redirects", action = "Index", cust = "" });     

это заставит ваш URL работать, отправив параметры в метод index как действие по умолчанию:

/redirects/cust100?id=123&url=www.nothere.com

А твой твой контроллер Метод:

public ActionResult Index(string cust, int id, string url)     
{     
    // do some DB stuff
    return RedirectResult(url);
};
2 голосов
/ 13 января 2010

Причина, по которой ваш код пытается найти действие cust100, заключается в том, что ваш URL соответствует маршруту по умолчанию:

routes.MapRoute(
  "Default",                                              // Route name
  "{controller}/{action}/{id}",                           // URL with parameters
  new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
); 

Попробуйте добавить явный маршрут перед этим маршрутом в файле global.asax, который выглядит следующим образом:

routes.MapRoute(
  "Redirects",         // Route name
  "redirects/{foo}",  // URL with parameters
  new { controller = "Redirect", action = "Redirect", foo = "" }
); 

Это сопоставит любой URL-адрес формы / redirects / abc123 с методом RedirectController.Redirect(string foo) и передаст abc123 (или любой другой) в качестве параметра foo.

1 голос
/ 13 января 2010

Ваш URL должен быть в той же форме, что и в вашем Global.asax.cs.

* 1004 Т.е. *

"{controller}/{action}/..."

Так что ваш URL, вероятно, должен выглядеть примерно так:

"Redirect/ToCustomer/123"

Где Redirect - контроллер, ToCustomer - метод действия на указанном контроллере, а «123» - параметр «id», предоставленный методу действия:

public class CustomerController : Controller
{
    public ActionResult ToCustomer(int id)
    {
        ...
    }
}

С другой стороны, почему бы просто не дать им ссылку на метод Detail на вашем CustomerController. I.e.:

"http://www.temp.com/Customer/Detail/123"
0 голосов
/ 13 января 2010

Вам нужно будет использовать «RedirectResult», который представляет перенаправление на новый URL.

return RedirectResult (url);

Это должно решить вашу проблему.

Следующие перечисленные типы являются доступными производными ActionResult:

1 ContentResult - представляет текстовый результат

2 EmptyResult - не представляет результата

3 FileResult - представляет загружаемый файл (абстрактный класс)

4 FileContentResult - представляет загружаемый файл (с двоичным содержимым)

5 FilePathResult - представляет загружаемый файл (с путем)

6 FileStreamResult - представляет загружаемый файл (с потоком файлов)

7 HttpUnauthorizedResult - представляет результат неавторизованного HTTP запрос

8 JavaScriptResult - представляет скрипт JavaScript

9 JsonResult - представляет результат JavaScript Object Notation (JSON), который может использоваться в приложении AJAX

10 RedirectResult - представляет перенаправление на новый URL

11 RedirectToRouteResult - представляет результат, который выполняет перенаправление с учетом словаря значений маршрута

12 PartialViewResult - базовый класс, используемый для отправки частичного представления в ответ

13 ViewResult - представляет HTML-код и разметку

14 ViewResultBase - класс Base, используемый для предоставления модели представлению, а затем визуализации вид на ответ

15 XmlResult - результат действия, который сериализует указанный объект в XML и выводит это поток ответов (предоставляется библиотекой MvcContrib)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...