2013-11-03 86 views
1

有沒有一種方法可以在MVC中以相同的方式在WebForms中返回重定向到URL。我有一個簡單的函數,如果列表爲空,則返回null,如果列表中有項目,則返回列表。如果列表爲空,我希望能夠重定向到同一網站中的另一個頁面。ASP.Net 4.5 WebForms返回重定向到URL

下面是函數

BillContext _context = new BillContext(); 

public List<Models.Bill> GetBills() 
{ 
    var bills = from b in _context.Bills 
       where b.UserName == HttpContext.Current.User.Identity.Name 
       select b; 

    if (bills.ToList().Count() < 1) 
    { 
     return null; 
    } 
    else 
    { 
     return bills.ToList(); 
    } 
} 

而不是返回空,我想回到這樣的事情

return Response.Redirect("~bills/create 

但是這是行不通的,它給了我一個紅色squigly行會不要走開。這是VS2012 ASP.net的WebForms項目

+0

這個代碼和ASP在同一個項目中。NET應用程序?如果是這樣,你完全有能力做到這一點。你忘了'「);'嘗試構建並向我們顯示確切的錯誤 –

+0

頁面在同一個應用程序中,這裏是錯誤消息錯誤名稱'Response'在當前上下文中不存在' –

+0

您有沒有「使用System.Web;」在* .cs的頂部?它應該在那裏自動如果是一個ASP.NET應用程序,但仔細檢查它。另外,這是「.as」文件的「.aspx」文件嗎? –

回答

2

您可以重定向到另一個aspx頁面像這樣

Response.Redirect("mypage.aspx"); 

你需要提供你的頁面的名稱與.aspx擴展的不同,在MVC結束,你需要提供URL。

編輯:

public List<Models.Bill> GetBills() 
{ 
    var bills = from b in _context.Bills 
       where b.UserName == HttpContext.Current.User.Identity.Name 
       select b; 

    if (bills.ToList().Count() < 1) 
    { 
     HttpContext.Current.Response.Redirect("mypage.aspx"); 
     return null; 
    } 
    else 
    { 
     return bills.ToList(); 
    } 
} 
+0

謝謝,我更新它以返回Response.Redirect(「CreateBill.aspx」);仍然沒有像「響應」我不知道是否有一個名稱空間,我需要導入 –

+0

雅,他在談論編譯時間。 –

+0

嘗試'HttpContext.Current.Response.Redirect(「mypage.aspx);'而不是'Response.Redirect(」mypage.aspx「);' –

1

你的問題是不是真的清楚。我不知道你期望如何返回List以外的東西(因爲方法的返回類型是這樣定義的)。

另外,「的Response.Redirect(」剛開始重定向。 - 無碼將其呼叫後執行It throws ThreadAbortException

此外,看起來像在應用程序的結構完全不正確的做法

但是,如果你真的想要的任何類型的代碼中的「失真」的,你可以:。

  1. 使返回值「對象」,並與重定向URL字符串返回我調用者,只需檢查(結果是字符串),然後重定向該字符串。

  2. 添加一些裁判paramenter像(...,REF動作A),然後定義爲如下:

    a =() => 
    { 
        Response.Redirect("..."); 
    }; 
    

然後,如果裁判值爲null和呼叫主叫方將檢查它:

Action actionToCallAfterIfExists = null; 
GetBills(ref actionToCallAfterIfExists); 

if(actionToCallAfterIfExists != null) 
{ 
    actionToCallAfterIfExists(); 
} 
+0

之後提及'return null;'謝謝@Agat我應該限定我是初級開發人員,所以我承認我的方法可能不足。我只是想創建一個數據訪問類/方法,我傳遞給ASP.net的ObjectDataSource。 –

+0

好吧,如果你想實現一些數據服務(數據層)(作爲單獨的類庫),那麼你絕對必須不要打電話給任何事情e直接從那裏接收Response.Redirect(即使你能夠添加對System.Web的引用)!!!甚至不要提到頁面重定向到從該庫的方法! – Agat

1

美中不足的是:你是完全能夠做到Response.Redirect(),因爲這是一個* .aspx文件的代碼隱藏,但是你在沒有實現的分離類210

所以,在單獨的類,你就用這種方式

HttpContext.Current.Response.Redirect("~bills/create"); 

注意,不是MVC重定向,所以probally你想 「〜票據/ create.aspx」。如果你想隱藏擴展,你應該找:http://www.iis.net/downloads/microsoft/url-rewrite