遇到问题将一个控制器传递给另一个控制器

时间:2013-12-02 10:19:47

标签: c# asp.net asp.net-mvc-4

我有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()。它可以工作但不适用于模型参数。

请让我知道我在做什么错误。

2 个答案:

答案 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.

编辑:

This article about nested layouts in MVC可能是您的好参考。

答案 1 :(得分:-1)

检查SearchColntroller索引视图的@model语句。 它写成@model AFS.Carrier.Web.UI.ViewModels.HomeViewModel。 当您在返回View(模型)中传递SearchViewModel时;声明。 在视图页面中更正模型。将其设置为SearchViewModel而不是HomeViewModel。