2010-10-24 37 views
0

我试图在另一个视图中呈现部分ascx视图。MVC中的ascx文件错误

我有但下面的错误在我的ASCX文件,经过一番研究,我仍然在黑暗中!:

类型或命名空间的定义,或 档案结尾expectedend-OF-文件预计

这里是DinnerForm.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NerdDinner.Models.Dinner>" %> 

<%: Html.ValidationSummary("Please Corrent the Errors and Try Again.") %> 

     <fieldset> 
      <legend>Fields</legend> 

<table border="0"> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Title) %></td> 
      <td><%: Html.TextBoxFor(m => m.Title) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Title, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.EventDate) %></td> 
      <td><%: Html.TextBoxFor(m => m.EventDate) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.EventDate, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Description) %></td> 
      <td><%: Html.TextAreaFor(m => m.Description) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Description, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Address) %></td> 
      <td><%: Html.TextBoxFor(m => m.Address) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Address, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Country) %></td> 
      <td><%: Html.DropDownListFor(m => m.Country, ViewData["countries"] as SelectList)%></td> 
      <td><%: Html.ValidationMessageFor(m => m.Country, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.ContactPhone) %></td> 
      <td><%: Html.TextBoxFor(m => m.ContactPhone) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.ContactPhone, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Latitude) %></td> 
      <td><%: Html.TextBoxFor(m => m.Latitude) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Latitude, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Longitude) %></td> 
      <td><%: Html.TextBoxFor(m => m.Longitude) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Longitude, "*") %></td> 
      </tr> 
      <tr> 
      <td><input type ="submit" value="Save" /></td> 
      </tr> 
     </table> 
     </fieldset> 

    <% } %> 

的代码,这里是我如何在一个名为文件中使用它的一个示例create.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<NerdDinner.Models.Dinner>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Host a Dinner 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Host a Dinner</h2> 
    <% Html.RenderPartial("DinnerForm"); %> 
    <div> 
     <%: Html.ActionLink("Back to List", "Index") %> 
    </div> 

</asp:Content> 

回答

2

请注意,你在.ascx文件的底部是否有<% } %>?这是您似乎错过的<% using (Html.BeginForm()) {%>的右括号。

添加

<% using (Html.BeginForm()) {%> 

<%: Html.ValidationSummary("Please Corrent the Errors and Try Again.") %> 

生成的表单

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<NerdDinner.Models.Dinner>" %> 

<%: Html.ValidationSummary("Please Corrent the Errors and Try Again.") %> 
<% using (Html.BeginForm()) {%> 
     <fieldset> 
      <legend>Fields</legend> 

<table border="0"> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Title) %></td> 
      <td><%: Html.TextBoxFor(m => m.Title) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Title, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.EventDate) %></td> 
      <td><%: Html.TextBoxFor(m => m.EventDate) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.EventDate, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Description) %></td> 
      <td><%: Html.TextAreaFor(m => m.Description) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Description, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Address) %></td> 
      <td><%: Html.TextBoxFor(m => m.Address) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Address, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Country) %></td> 
      <td><%: Html.DropDownListFor(m => m.Country, ViewData["countries"] as SelectList)%></td> 
      <td><%: Html.ValidationMessageFor(m => m.Country, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.ContactPhone) %></td> 
      <td><%: Html.TextBoxFor(m => m.ContactPhone) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.ContactPhone, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Latitude) %></td> 
      <td><%: Html.TextBoxFor(m => m.Latitude) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Latitude, "*") %></td> 
      </tr> 
      <tr> 
      <td><%: Html.LabelFor(m => m.Longitude) %></td> 
      <td><%: Html.TextBoxFor(m => m.Longitude) %></td> 
      <td><%: Html.ValidationMessageFor(m => m.Longitude, "*") %></td> 
      </tr> 
      <tr> 
      <td><input type ="submit" value="Save" /></td> 
      </tr> 
     </table> 
     </fieldset> 

    <% } %> 
+0

谢谢你,我应该看到那个!一旦时间限制到达,我会将其标记为正确答案:) – 109221793 2010-10-24 22:05:22

+0

@TaraWalsh - 将代码移动到ascx文件时,忘记复制它并不难。我昨天刚刚完成了NerdDinner的书,所以仍然有新的记忆:) – Marko 2010-10-24 22:13:31

1

从DinnerForm.ascx的底部删除<%}%>。

+0

这将纠正编译错误,但ascx显然是一种形式,所以他需要打开顶部的表单。 – 2010-10-24 22:07:54

1

你有一个未配对的正下方在你的ascx文件的末尾。

表格丢失。看起来像你省略:

<% using(Html.BeginForm()) { %> 

从顶部,就在验证总结之前。