我有2个控制器
HomeController
SearchController
两个ViewModels
HomeViewModel
SearchViewModel
两个观点
Home
Search
另外在我的布局上,我使用共享_Layout.cshtml
来定义一个表单:
@using (Html.BeginForm("Index", "Search", FormMethod.Post))
{
<div class="form-group">
<label class="sr-only" for="CarrierName">Carrier Number/Name</label>
<input class="form-control" name="Search" placeholder = "Carrier Number/Name" />
</div>
<button type="submit" id="btnSearch" class="btn btn-default">Find</button>
}
当我点击按钮时,我想重定向到SearchController
索引操作。
我的SearchColntroller
代码是:
public ActionResult Index(string Search)
{
var model = new SearchViewModel();
model.SearchText = Search;
return View("Search", model);
}
我的搜索页面代码是:
@Html.TextBoxFor(x => x.SearchText)
但我收到了错误。
传递到字典中的模型项是类型的 'AFS.Carrier.Web.UI.ViewModels.SearchViewModel',但是这本字典 需要类型的模型项 'AFS.Carrier.Web.UI.ViewModels.HomeViewModel'。
Auppose我将使用return view()
。它可以工作但不适用于模型参数。
请让我知道我在做什么错误。
答案 0 :(得分:0)
如果此代码失败,则会显示您描述的错误
public ActionResult Index(string Search)
{
var model = new SearchViewModel();
model.SearchText = Search;
return View("Search", model);
}
必须是Search
视图不包含@model SearchViewModel
语句。我首先要确保视图包含该语句。另外,我建议你不要放置像
@using (Html.BeginForm("Index", "Search", FormMethod.Post))
{
<div class="form-group">
<label class="sr-only" for="CarrierName">Carrier Number/Name</label>
<input class="form-control" name="Search" placeholder = "Carrier Number/Name" />
</div>
<button type="submit" id="btnSearch" class="btn btn-default">Find</button>
}
在_Layout.cshtml
文件中。该文件在其他视图中共享,因此在其中放置非常具体的内容(如BeginForm)会使您遇到正确的错误。
我建议您创建另一个布局文件,如果需要,专门针对_Layout.cshtml
和/或Home
使用Search
。 e.g。
_Search.cshtml
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
// Search specific stuff here.
编辑:
答案 1 :(得分:-1)
检查SearchColntroller索引视图的@model语句。 它写成@model AFS.Carrier.Web.UI.ViewModels.HomeViewModel。 当您在返回View(模型)中传递SearchViewModel时;声明。 在视图页面中更正模型。将其设置为SearchViewModel而不是HomeViewModel。