1

我有一个 Home ViewModel 类,其中包含其他类:

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" />
}

但在我的产品/搜索中,我只需要接收 ProductSearchRequest,因为还有其他页面使用其他 ViewModel 但包含 ProductSearchRequest。

我正在尝试这个:

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

    return View(response);
}

但它不起作用.. request.SearchText 始终为空..

我怎样才能做到这一点?

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 回答