簡體   English   中英

在ASP.net MVC中實現表單

[英]Implementing Forms in ASP.net MVC

我在視圖頁面上有一個簡單的表單,實現為用戶控件,看起來像這樣:

<%=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”呈現給頁面。 我如何讓它消失?

1)使用FormCollection作為參數:

public ActionResult List(FormCollection searchQuery)

現在,您可以迭代FormCollection並從搜索表單中獲取鍵/值搜索詞。

2)從BeginForm中刪除“=”:

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

那就是說,你真的應該使用 ,嗯......使用:

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

如果我正確理解你的問題,你可以使用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;
   ...
}

如果有人對使用Html.BeginForm的整個'使用'模式持懷疑態度 - 意識到IDE足夠聰明,可以將開頭'{'與結尾'}'匹配,這樣可以很容易地看到表單開始和結束的位置。

另外<%Html.EndForm(); %>需要一個分號,我不確定我喜歡:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM