Как я могу удалить контроллер и действие из URL-адреса и получить только URL-адрес в MVC - PullRequest
2 голосов
/ 01 февраля 2010

EDIT Возможно, я не очень хорошо сформулировал свою проблему. Проблема заключается не столько в маршрутизации, сколько в попытке получить фактический URL запроса.

Приложение может быть развернуто на многих отдельных машинах. Например

http://localhost:2990/Client/List

http://avapd024/llne.dev/Client/List

http://machine123:81/llne.prod/Client/List

и т. Д.

Причина, по которой я не могу использовать помощники Action.Link или html, заключается в том, что мне нужно создать ссылку, прежде чем я верну ее в представление, поскольку оно заполняется в виде сетки с использованием JSON (datatables.net) и NOT, а также времени представления отображается

спасибо

Мне нужно заполнить сетку списком элементов в виде ссылок, указывающих на другой контроллер и действие и идентификатор.

например; когда я загружаю сетку, URL-адрес выглядит следующим образом: http://localhost:2990/Client, что хорошо. Сетка содержит ссылку, подобную следующей

JSID = "<a href='http://" + RequestUrl + "/trainingdelivery/Get/" + referral.ReferralId + "'>Training Delivery</a>",

контроллером является 'trainingdelivery', а действием является 'Get' и id = referralid, что приводит к URL-адресу, подобному http://localhost:2990/trainingdelivery/Get/12345). Это нормально на моей локальной машине, но при развертывании он идет на сервер с другим URL-адресом, таким как http://avapd024/llne.dev:81/, поскольку вы можете видеть, что llne.dev:81 - это веб-сайт IIS, и мне нужно получить URL-адрес, где бы он ни находился это распознать его местоположение и перейти к правильному контроллеру и действию.

Я пытался использовать объект запроса, и, возможно, я мог бы взломать его там, чтобы получить его, но я хотел бы знать, есть ли более лучшие решения?

спасибо

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{resource}.js/{*pathInfo}");

            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });

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

AJAX CALL IN JQUERY

oTable = $('#referralTable').dataTable(
        {

            "bFilter": true,
            "bJQueryUI": true,
            "sPaginationType": "full_numbers",
            "bAutoWidth": false,
            "sAjaxSource": "../Client/Fetch",
            "aoColumns": [
            //client details
                            {"bVisible": false, "sName": "ReferralId" },
                            { "sTitle": "CRN", "sName": "CRN" },
                            { "sTitle": "JSID", "sName": "JSID" },
                            { "sTitle": "Name", "sName": "Name" }
]
});

sAjaxSource - это вызов, который загружает сетку с данными и возвращает JSON. К тому времени, когда он возвращается, его необходимо правильно отформатировать.

Ответы [ 4 ]

2 голосов
/ 01 февраля 2010

Да! Используйте метод HtmlHelper.ActionLink () .

JSID = <%= Html.ActionLink("Get", 
            new { controller = "trainingdelivery", id = referral.ReferralId}) %>

Предполагается, что вы настроили маршрут в файле Global.asax, как показано ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MyApp.MVC
{
  public class MvcApplication : System.Web.HttpApplication
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
        "TrainingDelivery",
        "trainingdelivery/{action}/{id}",
        new { controller = "TrainingDelivery", action = "Get", id = 0 }
      );
    }

    protected void Application_Start(object sender, EventArgs e)
    {
      RegisterRoutes(RouteTable.Routes);
    }
  }
}

Подробнее о ASP.Net Routing

0 голосов
/ 13 марта 2016

добавьте routes.MapMvcAttributeRoutes(); в свой RoutConfig, если у вас MVC5

step1:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
       name: "Home",
       url: "{controller}/{action}",
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Шаг: 2 Напишите маршрут выше вашего действия

[Route("{Id}")]
public ActionResult NewsGroupList(string Id)
{
    return View();
}

Ваш URL: websitename.com/Id

0 голосов
/ 03 февраля 2010

Решением было использование Request.ApplicationPath для создания URL.

0 голосов
/ 01 февраля 2010

Я думаю, вы должны использовать маршрутизацию домена, как определено в этой ссылке .

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