-1

1)フォーマットされたURL(SEO)を生成するためにT4MVCを使用するための最良のソリューションは何ですか

したいMVC.AGENCY.INDEX (int? Page, int IdAgency)

   http://localhost:30120/Agency/AgencyName

代わりは

http://localhost:30120/Agency?page=0&IdAgence=2

私はこれを持つことができます

http://localhost:30120/Agency?page=0&IdAgency=2&agency=agencyName

Agency?page=0&IdAgency=2AddMaperoute() を使用しますが、URL に( ) は必要ありません

シンボル & と = を / で変更するかもしれません。

2)追加すると

私は http://blog.ashmind.com/2010/03/15/multiple-submit-buttons-with-asp-net-mvc-final-solution/を使用しています

<input type="submit" name=="Agency" value="" class="button bbrightRed mr25" />


public virtual ActionResult Agency (AgencyViewModel _AgencyViewModel)
{
....
View return (_AgencyViewModel). AddRouteValue ("AgencyName", AgencyName);
}

情報URLを追加したい

追加すると例外がありView return (_AgencyViewModel). AddRouteValue ("AgencyName", AgencyName)ます。T4MVC WAS が誤って呼び出されました。T4MVC.tt を右クリックし、Run Custom Tool を選択して再生成する必要がある場合があります。

AddRouteValue() のない私の URL はhttp://localhost:30120/Agency

http://localhost:30120/Agency/Agancyname/fff-llll-mm
4

1 に答える 1

0

必要ないpage=0&IdAgency=2場合は、少なくとも 2 つのオプションがあります。

  1. http://localhost:30120/Agency/AgencyName/2/0likeおよび usingの URL に置き換え MVC.AGENCY.INDEX (string name, int? Page, int IdAgency)ます (以下のルーティングの Way1 を参照)。

  2. コントローラーから id と page をまったく削除し、名前のみでマップします (一意の場合のみ)。持っhttp://localhost:30120/Agency/AgencyNameて使用しMVC.AGENCY.INDEX (string name)ます (以下のルーティングの Way2 を参照)

SEO URL を取得するには、ルートを登録する必要があります。Application_Startのメソッドでそれを行うことができますGlobal.asaxここに良い概要があります

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



        routes.Map("Way1", "Agency/{name}/{IdAgency}/{Page}", MVC.Agency.Index().AddRouteValue("page", 1)
        , new { Page =  @"\d*" } );

        routes.Map("Way2", "Agency/{name}", MVC.Agency.Index() );

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

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}

T4MVC で使用するいくつかの拡張機能を作成しました。

public static class RouteExtensions
  {
#region Map

    public static Route Map(this RouteCollection routes, string routename, string url,
      ActionResult result)
    {
      return routes.Map(routename, url, result, null, null, null);
    }

    public static Route Map(this RouteCollection routes, string routename, string url,
      ActionResult result, object constraints)
    {
      return routes.Map(routename, url, result, null, constraints, null);
    }

    public static Route Map(this RouteCollection routes, string routename, string url,
      ActionResult result, object defaults, object constraints, string[] namespaces)
    {
      return routes.MapRoute(routename, url, result, defaults, constraints, namespaces)
        .SetRouteName(routename); 
    }


    #endregion


public static string GetRouteName(this RouteValueDictionary routeValues)
{
  if (routeValues == null)
  {
    return null;
  }
  object routeName = null;
  routeValues.TryGetValue("__RouteName", out routeName);
  return routeName as string;
}

public static Route SetRouteName(this Route route, string routeName)
{
  if (route == null)
  {
    throw new ArgumentNullException("route");
  }
  if (route.DataTokens == null)
  {
    route.DataTokens = new RouteValueDictionary();
  }
  route.DataTokens["__RouteName"] = routeName;
  return route;
}

}
于 2012-05-17T09:20:19.960 に答える