3

ビュー ページに、次のようなユーザー コントロールとして実装された単純なフォームがあります。

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

//several fields go here

<%Html.EndForm(); %>

解決したい問題が 2 つあります。1 つ目は、これを受け取るコントローラー メソッドがユーザー コントロールの型パラメーターを受け取るようにしたいということです。目標は、フォームのすべてのフィールドをメソッドのパラメーター リストに入れないようにすることです。コントローラ メソッドは現在、次のようになっています。

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

フォームの残りのフィールドは、建物タイプに対する検索を実行するために使用されます。

フォームは正常に投稿されました。期待どおりに容量を検索できますが、検索にパラメーターを追加すると、醜い匂いがします。

2 つ目の小さな問題は、ページがレンダリングされるときに、BeginForm タグが文字列 "System.Web.Mvc.Form" をページにレンダリングすることです。どうすればそれをなくすことができますか?

4

3 に答える 3

6

1) FormCollection を引数として使用します。

public ActionResult List(FormCollection searchQuery)

FormCollection を反復処理して、検索フォームからキー/値の検索語を取得できるようになりました。

2) BeginForm から「=」を削除します。

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

とは言っても、実際には を使用する必要があります。

<% using (Html.BeginForm("List", "Building", FormMethod.Post)) { %>
<% } %>
于 2009-01-27T14:29:40.927 に答える
0

私があなたの質問を正しく理解している場合は、htmlヘルパーを使用して、次の名前の入力を作成します。

<%=Html.TextBox("building.FieldNumber1")%>
<%=Html.TextBox("building.FieldNumber2")%>

以下を使用してデータにアクセスできるはずです。

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

そして、あなたの行動が、フォームが提出されたかどうかに応じて2つの異なることをすることである場合:

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

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult List(Building building)
{
   ...
   var1 = building.FieldNumber1;
   var2 = building.FieldNumber2;
   ...
}
于 2009-01-27T19:28:05.567 に答える
0

Html.BeginForm を使用した 'using' パターン全体に懐疑的な人がいる場合は、IDE が十分にスマートで、フォームの開始位置と終了位置を非常に簡単に確認できるように、開始部分と終了部分を一致させることが'{'できることを認識してください。'}'

また <% Html.EndForm(); %> にはセミコロンが必要ですが、それが好きかどうかはわかりません:)

于 2009-01-28T03:28:01.197 に答える