2014-05-01 190 views
1

我有一個託管Web窗體和MVC的Visual Studio解決方案。我最近將解決方案中的所有項目文件都升級到MVC 5.由於在MVC 5中如何處理表單標記的action屬性(default.aspx頁面返回一個空字符串,因此它將打破名爲「default.aspx」的頁面的所有回發行動和回發失敗)。 See this articlethis forum questionMVC 5 Upgrade Breaks Default.aspx頁面回傳

我的問題是,我有多個MVC視圖路由到以「/」或單詞結尾的URL。例如「mysite.com/about/」或「mysite.com/about」。我不能使用解決方案answered here,因爲它也會影響MVC路由(我試過並且MVC視圖不呈現)。我發現的唯一的解決方案,它的工作原理是手動去到每一個Default.aspx頁面,並使用此代碼:

protected void Page_Init(object sender, EventArgs e) 
{ 
    ((HtmlForm)((MyMasterPage)Page.Master)FindControl("form1")).Action = "Default.aspx"; 
} 

請注意,我不能設置action屬性在母版頁,因爲它會影響到所有非默認。 aspx頁面。

沒有任何的多了去了,我現在有兩個選擇:

  1. 走進每個Default.aspx頁面,並手動設置action屬性。
  2. 創建一個父頁面,手動設置動作屬性,並使每個default.aspx頁面繼承它。

這些解決方案並不理想。我注意到如果我創建一個新的ASP.NET Web應用程序項目並使用Web窗體模板,則default.aspx頁面沒有問題。

我還能做些什麼來解決這個空行爲屬性的問題?

+0

...等等,你使用MVC與WebForms事件? ... –

+0

a)爲什麼不能檢查Action是否爲空,如果爲空則將其設置爲默認值,那麼它不會影響非默認操作...或者b)使用控制適配器您鏈接到的解決方案,這也不會影響非默認頁面,因爲Action不會爲空? –

+0

我沒有在Web窗體事件中使用MVC。微軟正在推廣一個ASP.NET,這意味着你可以使用Web窗體,MVC或兩者。在我的情況下,我繼承了一箇舊的Web Forms項目,並希望使用MVC,所以除了現有的Web窗體外,我還添加了所有必需的東西來使用MVC。 – Halcyon

回答

0

我知道這不是我想要的,但我最終在母版頁中使用了PreInit事件處理程序來處理default.aspx頁面。

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    try 
    { 
     var masterPage = Page.Master as MasterPages.Toolbox; 

     if (masterPage != null) 
     { 
      var form = masterPage.FindControl("form1") as HtmlForm; 

      if (form != null) 
      { 
       if (string.IsNullOrEmpty(form.Action)) 
       { 
        if (string.IsNullOrEmpty(Request.Url.Query)) 
        { 
         form.Action = "default.aspx"; 
        } 
        else 
        { 
         form.Action = "default.aspx" + Request.Url.Query; 
        } 
       } 
      } 
     } 
    } 
    catch (Exception exception) 
    { 
     // Handle exception... 
    } 
}