2013-10-18 20 views
1

有沒有什麼辦法在傳入的對象實際進入/(傳遞給) ?梅託德..例如... 默認情況下,我想指數() - 行動的方法來始終以MyClass的的說法..如何「掛鉤」到參數/對象被傳遞給動作方法的管道

所以..如果用戶訪問mydomain.com/AController/

的triggerd行動的方法應該是

public ActionResult Index(MyClass arg) 
{ 
    return View(); 
} 

林真的不知道h的解釋這..但希望你得到它.. 我實際上想要做的是Umbraco在他們的MVC項目中做的同樣的事情..他們總是傳遞一個RenderModel對象,除了我想要有我自己的類型不是RenderModel ..

在此先感謝!

+0

原諒我,如果目的我忽略了你的Umbraco言論,但是你可能會忽略你在ASP.NET MVC中獲得的模型綁定點。你可以使用動作過濾器來掛鉤流水線,但是不清楚你是否要添加* RenderModel,或者如果RenderModel *是你的模型*。你能詳細說明一下'MyClass'的外觀和RenderModel的例子嗎? –

+0

通過使用行爲過濾我猜你的意思是這樣: [MyActionFilter] 公衆的ActionResult指數(MyClass的ARG) { 返回查看() },這是不是一種選擇。我不想使用任何?裝飾屬性..只是「簡單」修改管道之前,索引操作方法得到執行,所以它得到執行與參數ARGS作爲MyClass類型的對象 – Inx

回答

1

當我明白你的問題,你想用默認arg值被調用你的動作(如果沒有提供)

考慮到你的MyClass的是:

public class MyClass 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

可以定義喜歡你的路線:

 routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{arg}", 
      defaults: new { controller="Home", 
          action = "Index", 
          arg = new MyClass() { Id = 1, Name = "test" } 
         } 
     ); 

我想另一個選擇是有一個自定義ModelBinder,或者在較低的水平,自定義ValueProvider

+0

是的..這可能是一個選項..嗯.. ModelBinder你說..或ValueProvider ..你不會碰巧知道任何關於這個好讀書?..猜我可以谷歌它..但所有的建議都非常歡迎:) – Inx

+0

@Inx我的閱讀是紙書「ASP.NET MVC 4在行動中「(http://www.manning.com/palermo3/)它包含了關於ModelBinders和ValueProviders的整章Session作爲ValueProvider的後端。一本非常好的書 – jbl

0

如果您的課程夠簡單,則不需要攔截對該操作的調用。

例如,如果類具有intstringDateTime,甚至IEnumerable<int>等一個屬性,然後將MVC形式發佈數據或查詢字符串自動映射到類。

所以,像example.com/your-path/?id=1&categories=3,4,56&tags=this,that一個URL會自動映射到像類:

public YourClass 
{ 
    public int Id { get; set; } 
    public IEnumerable<int> Categories { get; set; } 
    public IEnumerable<string> Tags { get; set; } 
} 

如果你需要做更多的工作與數據,例如,如果你要發送XML/JSON和需要反序列化它在填充你的課程之前,那麼@ jbl的答案就是你的答案。從Umbraco的角度來看,如果您在劫持您的控制器,那麼您可以簡單地將您的課程添加到Index()操作中作爲附加參數,例如,您可以將其添加到Index()操作中。 Index(RenderModel model, YourClass arg)。這將拾取和填充任何額外的數據傳遞到您的頁面。

與@ JBL與一把umbraco方法的問題是,一把umbraco處理路由你,所以你不能沒有完全繞過一把umbraco的控制器指定自己的路由 - 這違背了使用一把umbraco :)

相關問題