2010-12-17 69 views
0

我正在尝试使用ASP.NET MVC 2,并且使用Html.BeginRouteForm这个简单的表单,它是工作文件,除了它将字符串System.Web.Mvc.Html.MvcForm写入html。为什么BeginRouteForm将类名写入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> 

回答

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)) { %> 
    ... 
<% } %>