我有一个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始终为null ..
我该怎么做?
答案 0 :(得分:3)
这只是一个黑暗的刺,但你的行动,尝试调用参数'ProductSearchRequest'
或者如何将整个表单放在该操作的视图中。 “搜索”将“ProductSearchRequest”作为模型?
答案 1 :(得分:1)
您遇到的问题是因为TextBoxFor()
将使用命名约定创建html输入,该命名约定应与原始操作绑定到相同类型的模型HomeVM
。
您可以尝试使用简单的TextBox()
辅助方法,如下所示:
@Html.TextBox("SearchText", Model.ProductSearchRequest.SearchText)
为了避免使用字符串值,您可以创建一个单独的表单partial,将ProductSearchRequest
对象作为模型,并调用:
@Html.RenderPartial("SearchForm",Model.ProductSearchRequest)
现在你可以在partial:
中使用这样的TextBoxFor()
方法
@Html.TextBoxFor(m => m.SearchRequest)