Frage

Ich möchte eine Strecke mit zwei optionalen args; Ich dachte, die folgende funktionieren würde:

routes.MapRoute(
    "ProductForm",
    "products/{action}/{vendor_id}_{category_id}",
    new { controller = "Products", action = "Index", vendor_id = "", category_id = "" },
    new { action = @"Create|Edit" }
);

Aber es funktioniert nur, wenn beide vendor_id und category_id vorgesehen sind; mit RouteDebug ich sehe, dass /products/create/_3 nicht meine Strecke auslöst, so dass ich hinzugefügt beiden anderen Routen:

routes.MapRoute(
    "ProductForm1",
    "{controller}/{action}/_{category_id}",
    new { controller = "Home", action = "Index", category_id = "" },
    new { controller = "Products", action = @"Create|Edit" }
);

routes.MapRoute(
    "ProductForm2",
    "{controller}/{action}/{vendor_id}_",
    new { controller = "Home", action = "Index", vendor_id = "" },
    new { controller = "Products", action = @"Create|Edit" }
);

Also, die Fragen:

  • Wird mit drei Routen der einzige Weg, um eine Route mit optionaler args?

  • machen
  • Sind diese URLs in Ordnung ist oder nicht, das heißt, würden Sie einen besseren Weg vorschlagen, dies zu tun?

War es hilfreich?

Lösung

Warum versuchen Sie nicht einen Standardwert geben vendor_id (wenn es nicht heißt angegeben 0), die Sie mit einer Route wegkommen würde helfen,

routes.MapRoute("ProductForm","products/{action}/{vendor_id}_{category_id}",
new { controller = "Products", action = "Index", vendor_id = "0", category_id = "" },   
new { action = @"Create|Edit" });

Andere Tipps

sieht mir gut, aber ich tun würde, es ein wenig anders aus:

routes.MapRoute(
"ProductForm1",
"product/category/{category_id}",
new { controller = "Home", action = "Index", category_id = "" },
new { controller = "Products", action = @"Create|Edit" }

);

und dann

 routes.MapRoute(
"ProductForm1",
"product/details/{product_id}",
new { controller = "Home", action = "Index", product_id = "" },
new { controller = "Products", action = @"Create|Edit" }

);

dann Ihre Klasse kann wie folgt aussehen:

ActionResults Index(){}
ActionResults Index(int category_id){// get categories}
ActionResults Index(int product_id){ // get products}

, aber das ist nur mir

Sie es so versuchen könnten:

routes.MapRoute(    
"ProductForm",
"products/{action}/{arg1}/{arg1_id}/{arg2}/{arg2_id}",    
new { controller = "Products", action = "Index", arg1 = "", arg2 = "", arg1_id = "", arg2_id = "" },
new { action = @"Create|Edit" });

Dann würden Sie ein gewisse Logik in Ihrer Action Methode erstellen arg1 und arg2 zu überprüfen und weicht Argument identifizieren, in geben wurden.

Ihre Action Urls würde wie folgt aussehen:

/products/create/vendor/10
/products/create/category/20
/products/create/vendor/10/category/20
/products/create/category/20/vendor/10

persönlich nicht ich so wie die Strecke scheint nicht sehr sauber, aber sollten Sie geben, was ich denke, dass Ihr auf der Suche zu erreichen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top