簡體   English   中英

Asp.Net MVC路由 - 處理具有相同簽名的多個路由?

[英]Asp.Net MVC Routes - Handle Multiple routes with the same signature?

我很想知道人們如何處理以下情況。

假設我們有一個DataField,每個DataField可以有無限數量的DataValues

我們有2個控制器來處理這些對象的操作

  • DataFieldController
  • DataValueContoller

現在,如果我們需要添加新的DataValue,我們需要知道CustomDataField的ID。 將使用以下URL,

/CustomDataValue/Add/1 

1 = DataField ID

但是,因為ASp.Net MVC引擎將參數名稱綁定到模型(在下面的情況下為IE。當我實際嘗試通過FieldID時,我的DatValeu對象將替換其ID)

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

我們怎么辦呢? 顯然,執行以下操作無效。

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

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

我認為這是一個常見的問題,我暫時找不到明顯的解決方案。 如果簽名是不同的,但兩者都是/ String / String / Int,那就沒問題

==========================

那些路線怎么能起作用呢?

  • / DataValue /添加/ {} DataFieldID
  • / DataValue /編輯/ {ID}
  • / DataValue /列表/ {DataFieldID}

我必須添加3條路線嗎?

在這樣的路線中使用約束:

routes.MapRoute(
    "Default", // Route name
    "CustomDataValue/{action}/{fieldid}", // URL with parameters
    new { controller = "Site", action = "Home", fieldid = UrlParameter.Optional } // Parameter defaults
);

它確保只有以“CustomDataValue”開頭的URL才會調用此路由。 它被聲明為常量,與默認路由不同。 確保在默認路由之前聲明這些指定的路由。 由於沒有限制,所有URL都與之匹配。

更新

我想你必須使用http://domain.com/CustomDataValue/Add/23這樣的URL調用DataValueController方法。 如果是這種情況,請使用以下路線:

routes.MapRoute(
    "CustomData", // Route name
    "CustomDataValue/{action}/{fieldid}", // URL with parameters
    new { controller = "DataValue", action = "List", fieldid = UrlParameter.Optional } // Parameter defaults
);

如果在名為List / Add / Edit的DataValueController中有操作方法,則此方法有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM