在ASP.net MVC中实现表单

3

我在一个视图页上有一个简单的表单,实现为用户控件,大致如下:

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

//several fields go here

<%Html.EndForm(); %>

我希望解决两个问题,第一个是我希望接收此表单的控制器方法可以使用用户控件的类型参数。目标是避免将表单中的所有字段都放入方法的参数列表中。当前控制器方法如下:

[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);
    }

表单中的其他字段将用于对建筑类型进行搜索。

表单可以正常提交,我可以按照预期的方式搜索容量,但是当我添加搜索参数时,可能会出现糟糕的情况。

第二个较小的问题是,页面渲染时BeginForm标记会将字符串"System.Web.Mvc.Form"呈现到页面上。我该如何让它消失?

3个回答

6

1) 使用FormCollection作为参数:

public ActionResult List(FormCollection searchQuery)

现在您可以迭代FormCollection并从搜索表单中获取键/值搜索术语。

2)从BeginForm中删除“=”:

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

话虽如此,你应该真的使用,嗯...使用:

ASP.NET MVC Beta
<% using (Html.BeginForm("List", "Building", FormMethod.Post)) { %>
<% } %>

我正在使用您的建议,但控制器方法从未触发。我一定漏掉了其他什么东西... - KevDog
当您提交时会发生什么? - Craig Stuntz
如果没有任何反应,那么我会非常仔细地查看提交到服务器的内容。通常我会使用Firebug进行调试。如果表单没有提交任何内容或提交了错误的内容,则需要检查渲染的HTML代码。 - Craig Stuntz
1
我的错误是没有删除EndForm调用。控制器方法正常触发。非常感谢您的回答。 - KevDog

0

如果有人对使用Html.BeginForm的整个“使用”模式持怀疑态度-请意识到IDE足够智能,可以将开头的'{'与结尾的'}'匹配,这使得很容易看到您的表单从哪里开始和结束。

另外,<% Html.EndForm(); %>需要一个分号,我不确定我喜欢它 :)


0
如果我正确理解了你的问题,你使用HTML助手并创建名为:的输入。
<%=Html.TextBox("building.FieldNumber1")%>
<%=Html.TextBox("building.FieldNumber2")%>

你应该能够使用以下方式访问数据:

public ActionResult List(Building building)
{
   ...
   var1 = building.FieldNumber1;
   var2 = building.FieldNumber2;
   ...
}

如果您的操作是根据表单是否已提交来执行两个不同的操作:

public ActionResult List()
{
    //some code here
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult List(Building building)
{
   ...
   var1 = building.FieldNumber1;
   var2 = building.FieldNumber2;
   ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接