2009-07-08 12 views
1

對於同一家公司,我們有兩個獨立的前端項目,除了所有的html和css外,它們基本相同。 (同一公司內的不同部門)我試圖添加一個內置於另一個的頁面。 (是的,是的,我知道我們可能應該建立一個應用程序,根據哪個部門的實例正在運行,顯示不同的演示文稿,以便我們不必維護兩個單獨但相同的代碼庫,但我們無法去有這個客戶端。)ASP.NET MVC Html.TextBox不會在運行時編譯 - 相同的文件可以在其他項目中工作

無論如何,我複製了控制器,模型,以及aspx和ascx頁面。我需要改變的是根名稱空間上的名稱。出於某種原因,在第一個項目中成功編譯的特定ascx頁面在第二個項目中失敗。

這裏的錯誤消息:

e:\pathtocode\Web\Views\EmailToFriend\Email.ascx(24): error CS1061: 
'System.Web.Mvc.HtmlHelper<MainWeb.Models.EmailToFriend>' does not contain a definition for 
'TextBox' and no extension method 'TextBox' accepting a first argument of type 
'System.Web.Mvc.HtmlHelper<MainWeb.Models.EmailToFriend>' 
could be found (are you missing a using directive or an assembly reference?) 

這裏的ASCX代碼:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Form.ascx.cs" 
Inherits="MainWeb.Views.EmailToFriend.Form" %> 

<%@ Import Namespace="System.Web.Mvc" %> 

<table> 
    <span class="error" style="color: red;"> 
     <%= Model.ErrorString %> 
    </span> 
    <tr> 
     <td>Friend's Name: </td> 
     <td><%= Html.TextBox("RecipientName", Model.RecipientName)%></td> 
    </tr> 
    <tr> 
     <td>Friend's Email Address: </td> 
     <td><%= Html.TextBox("RecipientAddress", Model.RecipientEmail)%></td> 
    </tr> 
    <tr> 
     <td>Your Name: </td> 
     <td><%= Html.TextBox("SenderName", Model.SenderName ?? UserName)%></td> 
    </tr> 
    <tr> 
     <td>Your Email Address: </td> 
     <td><%= Html.TextBox("SenderAddress", Model.SenderEmail ?? UserEmail)%></td> 
    </tr> 
    <tr> 
     <td>Message</td> 
     <td><%= Html.TextArea("Message", Model.Message) %></td> 
    </tr> 
    <tr> 
     <td colspan="2"><input type="submit" value="Send" style="float: right;"/></td> 
    </tr> 
</table> 

我一直在把玩一切圍繞我能想到的。 Html.TextBox可以在同一個項目中的其他文件中正常工作,所以我無法弄清楚爲什麼這是吹大塊。

UPDATE

我剛剛發現,在此代碼的項目,VS識別項目爲MVC的Web應用程序,但在第二個地方不起作用,VS沒有認識到它是MVC。至少如果我右鍵點擊一個Views子文件夾,前者有一個'New View'的上下文菜單項,後一個項目沒有這個。

現在我所要做的就是弄清楚如何將它變成一個MVC項目,也許這將解決它。

更新#2

討厭鬼,沒有工作。我修改了Import指令以使用System.Web.Mvc.Html,現在至少intellisense顯示了.TextBox擴展的定義 - 將嘗試重新啓動該框以查看會發生什麼。 :(

最後更新

正如我張貼在評論,我發現了錯誤,它有一個完全不同的文件做的,所以它基本上是我的錯誤,而不是一個代碼問題。:(

+0

這是一個大型項目嗎? 嘗試創建一個新項目並從舊項目遷移東西... – 2009-08-30 10:05:28

+0

不幸的是,這是一個代碼15錯誤=>錯誤的來源是從顯示器大約15英寸。 =:o – 2009-09-09 14:10:42

回答

0

確定表格(如Inherits="MainWeb.Views.EmailToFriend.Form")從MVC的的ViewPage基類繼承?

我的猜測是,你要麼需要有

Inherits="System.Web.Mvc.ViewPage" 

namespace MainWeb.Views.EmailToFriend 
{ 
    public class Form : System.Web.Mvc.ViewPage 
    { 
    } 
} 

最有可能你也不必CodeBehind="Form.ascx.cs"。您是否爲項目添加了常規Web表單而不是MVC視圖?

0

您是否確定編譯器在web.config的codedom部分中設置爲3.5?我奮鬥了幾個小時,試圖找出爲什麼我不能使用HTML助手,大多數職位建議添加System.Web.Mvc。Html命名空間對於intellisense來說是必需的,但是由於這些頁面在被渲染之前不會被編譯,所以您不會意識到這是錯誤的安全性。這裏是一個修復編譯器版本問題的帖子:Problem creating my own extension to HtmlHelper

相關問題