2017-10-16 36 views
1

我正在開發一個使用帶有剃刀頁面的Asp.net核心2.0的Web應用程序。我用一些數據創建一個對象,並希望將該對象發送到另一個頁面。如何在帶有剃鬚刀頁面的ASP.Net Core上將對象從一個頁面傳遞到另一個頁面?

其實我這樣做:

var customObject = new{ 
    //some values 
}; 
return RedirectToPage("NewPage", customObject); 

我看到網址有我送對象的值,但我找不到如何拍攝值(在新頁實例)。

任何人都可以知道如何在剃鬚刀頁面之間共享對象嗎?這是實現它的正確方法嗎?或者還有更好的方法嗎?

在此先感謝

+0

將對象從視圖中發回到控制器時發送對象 –

+0

因此它開始。 Web Forms的禍害,重生爲Razor Pages。當事情是「魔法」時,如何做這樣簡單的事情就不再明顯了。 Razor Pages或不,它的工作原理與任何其他HTTP請求相同。您必須將這些值發佈到新的URL,然後從結果URL的請求正文中檢索數據。 –

+0

忘記微軟說的話,保存一隻小貓,不要使用Razor Pages。 –

回答

1

您可以將參數傳遞到指定的處理程序在頁面模型類,像這樣:

return RedirectToPage("Orders", "SingleOrder", new {orderId = order.Id}); 

凡頁面模型類方法有此簽名:

public void OnGetSingleOrder(int orderId) 

如果你正在傳遞一個對象,你可以直接傳遞這個對象,但根據我的經驗,任何子對象都沒有被填充。

0

我不知道這是否會幫助你,或者是MVVM味道像剃刀很好的做法,但ASP.NET核心API的項目裏面,我經常使用自定義的全球DI'ed服務,如

public void ConfigureServices(IServiceCollection services) 
{ 
    ... 

    services.AddSingleton<IMyService, MyService>(); 

    ... 

    services.AddMvc(); 
} 

您可以在您的IndexModelCustomModel之間交換數據,例如。通過設置它像

public class CustomModel : PageModel 
{ 
    public IMyService _myService; 

    public CustomModel(IMyService myService) 
    { 
     _myService = myService; 
    } 

    public async Task<IActionResult> OnPostAsync(...) 
    { 
     ... 

     _myService.SetDataOrSometing(...); 

     ... 

     return RedirectToPage(); 
    } 
} 

和檢索它像

public class IndexModel : PageModel 
{ 
    public IMyService _myService; 

    public IndexModel(IMyService myService) 
    { 
     _myService = myService; 
    } 

    public void OnGet() 
    { 
     var data = _myService.GetDataOrSomething(); 
    } 
} 

從這裏你也可以使用ObserveableCollection並註冊事件,以獲取更新到你PageModels。

恕我直言,這是一種將對象從一個頁面傳遞到另一個頁面的方式,並且清晰地分離關注點。

相關問題