在ASP.net MVC中实现表单

Kev*_*Dog 3 .net c# forms asp.net-mvc views

我在视图页面上有一个简单的表单,实现为用户控件,看起来像这样:

<%=Html.BeginForm("List", "Building", FormMethod.Post) %>

//several fields go here

<%Html.EndForm(); %>
Run Code Online (Sandbox Code Playgroud)

我想解决两个问题,第一个是我希望接收它的控制器方法获取用户控件的类型参数.目标是避免将表单的所有字段放入方法的参数列表中.控制器方法目前看起来像这样:

[AcceptVerbs("Post")]
    public ActionResult List(string capacityAmount)
    {
        ProfilerDataDataContext context = new ProfilerDataDataContext();
        IEnumerable<Building> result = context.Buildings.OrderBy(p => p.SchoolName);
        ViewData["Boroughs"] = new SelectList(Boroughs.BoroughsDropDown());

        return View(result);
    }
Run Code Online (Sandbox Code Playgroud)

表单中的其余字段将用于对建筑物类型进行搜索.

表单发布很好,我可以按照你期望的方式搜索容量,但是当我在搜索中添加参数时,我可以闻到丑陋.

其次,较小的问题是当页面呈现时,BeginForm标记将字符串"System.Web.Mvc.Form"呈现给页面.我如何让它消失?

Cra*_*ntz 6

1)使用FormCollection作为参数:

public ActionResult List(FormCollection searchQuery)
Run Code Online (Sandbox Code Playgroud)

现在,您可以迭代FormCollection并从搜索表单中获取键/值搜索词.

2)从BeginForm中删除"=":

<% Html.BeginForm("List", "Building", FormMethod.Post) %>
Run Code Online (Sandbox Code Playgroud)

那就是说,你真的应该使用,嗯......使用:

<% using (Html.BeginForm("List", "Building", FormMethod.Post)) { %>
<% } %>
Run Code Online (Sandbox Code Playgroud)