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

ASP.NET MVC:使用ASPX视图引擎而不使用帮助程序?,asp.net,razor,runat,Asp.net,Razor,Runat,我讨厌那些剃须刀助手。(LabelFor,TextboxFor…)他们试图帮助我,但什么也没教我 我想试试ASPX引擎。当我打开它时,左边甚至有一个工具箱,里面有所有旧的好html命令。为什么我不能用它 为什么当我尝试构建应用程序intellisense时,当我知道MVC不需要runat=“server”时,它是必需的 简言之,我如何使用帮助器编写HTML w/o? 如有任何建设性意见,将不胜感激 样本: <%@ Page Language="VB" MasterPageFile="~/V

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

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

为什么当我尝试构建应用程序intellisense时,当我知道MVC不需要runat=“server”时,它是必需的

简言之,我如何使用帮助器编写HTML w/o? 如有任何建设性意见,将不胜感激

样本:

<%@ 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>`
“/”应用程序中的服务器错误。 “ListBox”类型的控件“MainContent\u ctl00”必须放置在runat=server的表单标记中。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。 异常详细信息:System.Web.HttpException:必须将类型为“ListBox”的控件“MainContent\u ctl00”放置在runat=server的表单标记中。 源错误: 第22行:
    第23行:
  • 第24行:
  • 第25行:
第26行:` 我讨厌那些剃须刀助手。(LabelFor,文本框用于…)

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

简言之,我如何使用帮助器编写HTML w/o

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>

名字
选择一个项目
项目1
项目2
项目3
好啊
显然,现在您可以忘记模型中的自动数据绑定、验证、路由等等

至于runat=“server”窗体中的列表框存在的问题,您似乎在ASP.NET MVC应用程序中使用了一些不受支持的经典WebForms服务器端控件。服务器端控件在MVC中不起作用,因为它们依赖于ViewState之类的东西,需要您使用runat=“Server”。。。MVC中不再存在的东西


因此,我建议您继续阅读一些关于MVC的入门教程:

您讨厌razor助手,但您喜欢使用工具箱中的预定义元素?工具箱中的项用于webforms,但也可用于MVC。这是因为MVC和webforms仍然是asp.net家族的成员。但是,我不建议你这么做

简言之,我如何使用帮助器编写HTML w/o

你如何写一篇简单的文章?只需根据需要键入html标记。您可以使用razor/aspx(选择哪一种并不重要)语法在集合上循环并基于数据构建html。没有什么强迫您使用razor帮助程序或webforms控件


我认为现在可能是学习更多关于您正在使用的技术的时候了,因为您似乎对这里真正基本的东西感到困惑…

列表框是一个.Net元素。在razor模板中,您可能可以执行以下操作:

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

@对于//某些循环条件
{
文本1
}

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

是,但您只提到那些基本的html元素。列表框、下拉框等呢?关于你的第一个答案。是的,我想在MVC工作,但前提是他们让事情变得简单一点。他们呢?他们在那里,工作得很好。例如,您有
Html.DropDownListFor
Html.ListBoxFor
帮助程序,它们允许您在MVC中实现这一点。我说的是纯Html语法。所以我要重新表述我的问题。razor helkpers是编写代码的唯一方法还是也有纯HTLP?不,当然,助手不是实现这一点的唯一方法。正如我在回答中已经解释和展示的那样,您可以编写纯静态HTML。但请千万不要这样做,因为你会失去帮助者提供的许多好处和功能,你会更讨厌MVC:-)所以我看到所有的专家都在这里,但没有人回答一个简单的问题:如何在不使用Razor@HTML.Listbox helper的情况下编写Listbox控件?我强烈不同意你可以使用服务器的事实MVC中的侧控件。你没看到OP尝试这么做时遇到的异常情况吗?虽然您仍然可以通过使用WebForms视图引擎将
runat=“server”
放在Razor中来规避此问题,但这已经不可能了。@DarinDimitrov,您有权不同意,但我相当肯定这一点。如果您不相信我,请查看以下链接:、、以及更多。顺便问一下,谁说要在razor文件中使用它们?OP谈论的是aspx引擎。但是您需要在ASP.NET MVC母版页中放置一个带有runat=“server”的表单。您会在ASP.NET MVC应用程序中执行此操作吗?我不会:-)更不用说这些控件将试图调用代码中的某些服务器端事件。你的MVC应用程序中有代码吗?@DarinDimitrov,那么?你的意思是什么?谁说了别的?而且,我从来没有说过我建议使用这个,恰恰相反!我的观点是,您不能在ASP.NET MVC中使用服务器端控件,正如我已经说过的:-),但最好不要使用它们。我想这是一件我们都同意的事情。所以我看到所有的专家都在这里,但没有人回答一个简单的问题:如何在不使用Razor@HTML.Listbox helper的情况下编写Listbox控件?如果Listbox使用HTML是您想要的,那么它就是: