ASP.NET MVC:使用ASPX视图引擎没有使用帮助程序?

时间:2012-08-25 09:10:49

标签: asp.net razor runat

我讨厌那些剃刀助手。 (LabelFor,TextboxFor ...)他们试图帮助我,但他们什么都没教我。

我想试试ASPX引擎。当我打开它时,左边甚至还有工具箱和所有旧的好的html命令。为什么我不能使用它?

当我尝试构建app intellisense时,怎么说当我知道MVC不需要时会说runat =“server”?

简要说明如何使用帮助程序编写HTML? 任何建设性的建议都将受到赞赏。

样品:

<%@ Page Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">Home Page</asp:Content>

<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
   <asp:ListBox runat="server">
        <asp:ListItem Text="text1" />
        <asp:ListItem Text="text2" />
    </asp:ListBox>
</asp:Content>

错误:

`Server Error in '/' Application.
Control 'MainContent_ctl00' of type 'ListBox' must be placed inside a form tag with runat=server.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Control 'MainContent_ctl00' of type 'ListBox' must be placed inside a form tag with runat=server.

Source Error:

Line 22:                 <ul id="menu">
Line 23:                     <li><%: Html.ActionLink("Home", "Index", "Home")%></li>
Line 24:                     <li><%: Html.ActionLink("About", "About", "Home")%></li>
Line 25:                 </ul>
Line 26:             </div>`

3 个答案:

答案 0 :(得分:1)

你讨厌剃刀助手,但你喜欢使用工具箱中的预定义元素吗?工具箱中的项目适用于webforms,但也可用于MVC。这是因为MVC和webforms仍然是asp.net系列的成员。但是,我真的不建议那样做......

  

简要说明如何使用帮助程序编写HTML?

你怎么写一个简单的文字?只需根据需要输入html标签即可。你可以使用razor / aspx(你选择哪一个并不重要)语法循环你的集合并根据你的数据构建html。没有什么是强迫你使用剃须刀帮助器或webforms控件...

我认为现在可能是了解您正在使用的技术的更多时机,因为您似乎对这里真正基本的东西感到困惑......

答案 1 :(得分:0)

  

我讨厌那些剃刀助手。 (LabelFor,TextboxFor ...)

ASP.NET MVC是一种与经典WebForms截然不同的模式和概念。如果您不喜欢这些新概念,这可能意味着ASP.NET MVC不适合您。您可以随时回到经典的WebForms开发。

  

简要说明如何使用帮助程序编写HTML?

ASP.NET MVC中没有任何内容强迫您使用帮助程序。您可以在视图中完美地编写纯静态HTML:

<form action="/home/save" action="post">
    <label for="first_name">First name</label>
    <input type="text" name="first_name" id="first_name" />

    <label for="item">Select an item</label>
    <select id="item" name="item">
        <option value="1">item 1</option>
        <option value="2">item 2</option>
        <option value="3">item 3</option>
    </select>

    <button type="sybmit">OK</button>
</form>

显然现在你可以忘记模型中的自动数据绑定,验证,路由等......

就使用runat =“server”的表单中的ListBox问题而言,似乎您在ASP.NET MVC应用程序中使用了一些不受支持的经典WebForms服务器端控件。服务器端控件在MVC中不起作用,因为它们依赖于ViewState之类的东西,并要求你将它们放在带有runat =“server”的表单中,...... MVC中不再存在的东西。

所以我建议你继续阅读一些关于MVC的入门教程:http://asp.net/mvc

答案 2 :(得分:0)

ListBox是一个.Net-ified SELECT元素。在剃刀模板中,您可以执行以下操作:

<select id="list1">
  @for // some loop condition
  {
    <option value="@Data.someValue">Text1</option>
  }
</select>

...其中@Data绑定到模型,Text1也可以类似地声明。