1

他のクラスを含むHomeViewModelクラスがあります。

public class HomeVM
{
    public ProductSearchRequest ProductSearchRequest { get; set; }
    //Other class
    //Other class
    //Other class
}

私のホーム/インデックスビューにはが@model HomeVMあり、そこに検索テキスト入力があります:

@using (Html.BeginForm("Search", "Product"))
{
    @Html.TextBoxFor(m => m.ProductSearchRequest.SearchText)
    <input type="submit" value="Search" />
}

しかし、私のProduct / Searchでは、ProductSearchRequestのみを受信する必要があります。これは、他のViewModelを使用しているが、ProductSearchRequestを含む他のページがあるためです。

私はこれを試しています:

public ActionResult Search(ProductSearchRequest request)
{
    var response = new ProductSearchResponse
    {
        SearchText = request.SearchText,
        Products = GetProductsByName(request.SearchText)
    };

    return View(response);
}

しかし、それは機能しません。request.SearchTextは常にnullです。

これどうやってするの?

4

2 に答える 2

3

これは暗闇の中での刺し傷ですが、あなたの行動は、パラメーター「ProductSearchRequest」を呼び出してみてください

または、そのアクション、つまり「ProductSearchRequest」をモデルとする「検索」のビューにフォーム全体を配置するのはどうですか?

于 2012-05-30T20:32:13.607 に答える
1

あなたが抱えている問題は、元のアクションTextBoxFor()と同じタイプのモデルにバインドされることが予想される命名規則を使用して html 入力を作成するためです。HomeVM

次のような単純なTextBox()ヘルパー メソッドを使用してみることができます。

@Html.TextBox("SearchText", Model.ProductSearchRequest.SearchText)

文字列値の使用を避けるために、ProductSearchRequestオブジェクトをモデルとして受け取る別のフォーム パーシャルを作成し、次を呼び出すことができます。

@Html.RenderPartial("SearchForm",Model.ProductSearchRequest)

TextBoxFor()これで、パーシャルで次のようなメソッドを使用できます。

@Html.TextBoxFor(m => m.SearchRequest)
于 2012-05-30T20:42:04.880 に答える