2

Html.RenderPartial でレンダリングする PartialView を作成し、ビューの名前とバインドする厳密に型指定されたデータ項目を渡します (以下)。

    <% Html.RenderPartial("SearchViewUserControl", ViewData["SearchData"]); %>

部分ビューには、送信ボタンを含むフォームがあります。

<% using (Html.BeginForm("Search", "Home"))
   { %>
             ...
    <div>
        <input type="submit" value="Search" />
    </div>
<% } %>

コントローラーのアクション メソッド (以下) にブレークポイントを設定しましたが、searchData には何も設定されていません。私は何を間違っていますか?

   public ActionResult Search(SearchDomain searchData)
    {
        if (ModelState.IsValid)
        {
        }

        return View();
    }
4

3 に答える 3

0

正直なところ、RenderActionの方が使いやすいと思います。

于 2009-11-12T01:53:08.383 に答える
0

何が間違っているかを知るために、実際のフォーム要素を投稿する必要があります。

フォーム html は、バインディングを SearchDomain に設定するものです。フォーム要素に次のような名前を付けたいとします:

<input name="searchData.SomeProperty">

それらがアクションパラメーターにバインドするようにします。

于 2009-11-11T21:21:53.147 に答える
0

SearchDomainコントローラー メソッドからビューからオブジェクトを引き出すには、ビューがオブジェクトを含むカスタム ViewModel クラスSystem.Web.Mvc.ViewPage<Models.SearchDomain>,から継承するか、そのクラスを継承する必要があります。SearchDomain

もう 1 つの方法は、ビューを から継承しSystem.Web.Mvc.ViewPage、UpdateModel を使用してビュー データをSearchDomainオブジェクトにキャストすることです。このようなもの:

public ActionResult Save()
{
        SearchDomain domain = new SearchDomain ();

        UpdateModel(domain , new[] { "Name", "Email", "Phone", ... });
        return View(domain); 
}
于 2009-11-11T21:22:46.310 に答える