为什么BeginRouteForm会将类名写入html?

时间:2010-12-17 13:57:07

标签: html asp.net-mvc-2

我正在尝试ASP.NET MVC 2,我有一个使用Html.BeginRouteForm的简单表单,它是工作文件,除了它将字符串System.Web.Mvc.Html.MvcForm写入html。

为什么会这样做?如何让它停止?


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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>

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

    <h2>Index</h2>

    <%=Html.BeginRouteForm(String.Empty, new {Action = "Search"}, FormMethod.Get) %>


    <%:Html.DropDownList("worklist", this.Model )%>

    <br />

    <input type="submit" />

    <% Html.EndForm(); %>
</asp:Content>

<h2>Index</h2>

<form action="/Site/Search" method="get">System.Web.Mvc.Html.MvcForm


<select Label="Worklists" id="worklist" name="worklist"><!-- Options -->
</select>

<br />

<input type="submit" />

</form>

1 个答案:

答案 0 :(得分:2)

因为你的电话不正确。 <%=或多或少意味着“将结果视为字符串”。 .ToString()的默认实现编写了类名。您可以使用<%,这样可以解决问题。但更好的方法是将它与using一起使用,这对于MVC更为惯用,并且使您无需明确调用EndForm。换句话说,更改您的代码:

<%=Html.BeginRouteForm(String.Empty, new {Action = "Search"}, FormMethod.Get) %>
    ...
<% Html.EndForm(); %>

......来:

<% using (Html.BeginRouteForm(String.Empty, new {Action = "Search"}, FormMethod.Get)) { %>
    ...
<% } %>