0

我试图在我的索引视图中显示两个部分视图。在这些部分视图中是数据网格,当在我设置的搜索框中搜索某些内容时,我想显示数据。这两个页面在我单独执行时都可以工作,但我不知道如何将它们用作局部视图。

我的视图如下所示:

@using (Html.BeginForm("Index", "Home", "POST"))
{
<div class="searchField">
    <div class="searchbox">
        Search: <input type="text" name="heatSearch" />
        <input type="submit" value="Submit">
    </div>
</div>
}

 <div>
 @Html.Partial("PartialChemAnalysis", (string)ViewBag.SearchKey)
 </div>
 @Html.Partial("PartialSlag", (string)ViewBag.SearchKey)

我的控制器看起来像这样:

 public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Index(string heatSearch)
    {
        ViewBag.SearchKey = heatSearch;

        return View();
    }

    public ActionResult PartialChemAnalysis(string heatSearch)
    {
        HomeModel C = new HomeModel();
        IEnumerable<HomeModel> model = C.ChemList;
        C.ChemistryDataPull(heatSearch);

        return PartialView(C.ChemList);
    }

    public ActionResult PartialSlagView(string heatSearch)
    {
        PartialSlagViewModel D = new PartialSlagViewModel();
        IEnumerable<PartialSlagViewModel> model = D.SlagList;
        D.SlagViewDataPull(heatSearch); 

        return PartialView(D.SlagList);
    }

理想情况下,该搜索框中的内容将传递给两个视图,并且网格将基于此形成。我不确定我做错了什么,因此感谢您的帮助。

4

4 回答 4

0

我将从这个开始:

@{
      //create your first model
      HomeModel CModel = new HomeModel();
      CModel.ChemistryDataPull(Model.SearchValue);

      //create your other model
      PartialSlagViewModel DModel = new PartialSlagViewModel();
      DModel.SlagViewDataPull(Model.SearchValue); 
}

@Html.Partial("PartialAnalysis", CModel)
@Html.Partial("PartialSlag", DModel)

这是假设您已经搜索、处理了回发,并且您已将 SearchValue 返回到模型中的视图。您可以在 ViewBag.SearchValue 中返回它,而不是我想并替换Model.SearchValueViewBag.SearchValue,但您的模型将是存储它的更好地方。

于 2013-03-14T16:46:32.563 回答
0

我需要将视图中的部分视图调用更改为:

@if(ViewBag.SearchKey != null)
{
 <div>
 @Html.Action("PartialChemAnalysis", "Home", (string)ViewBag.SearchKey)
 </div>
 <div>
 @Html.Action("PartialSlagView", "Home", (string)ViewBag.SearchKey)
</div>
 }
于 2013-03-14T19:36:47.480 回答
0

如果我是你,我会将其发布到另一种方法。

@using (Html.BeginForm("Index", "Home", "POST"))
{
<div class="searchField">
    <div class="searchbox">
        Search: <input type="text" name="Search" />
        <input type="submit" value="Submit">
    </div>
</div>
}


 @Html.Partial("PartialAnalysis", (string)ViewBag.SearchKey)
 @Html.Partial("PartialSlag", (string)ViewBag.SearchKey)


//In Home Controller

[HttpPost]
public ActionResult Index(string Search)
{
    ViewBag.SearchKey = Search;

    return View();
}
于 2013-03-14T16:57:40.660 回答
0

部分视图不需要控制器操作。控制器动作的存在实际上会将其变为视图。

在您的 @Html.Partial 调用中,您希望传递一个视图模型以供视图使用。这是您要放置网格数据的地方,通过任何关键字搜索,排序,准备并准备呈现。

这可以是您创建的完全不同的视图模型,专门用于支持您的局部视图,作为父页面视图模型中的属性公开,或者只是父页面视图模型中具有数据的 IEnumerable 属性(我顺便说一句,更喜欢第一种方法;它在代码方面更重,但更好地保留了封装)。

总而言之,您的控制器如下所示:

public class HomeController : Controller
{
    public ActionResult Index(string search)
    {
        return View(new IndexViewModel(search));
    }
}

您的视图模型如下所示:

public class IndexViewModel
{
private string _search;

public IndexViewModel(string search)
{
    _search = search;
}

public AnalysisViewModel AnalysisViewModel
{
    get
    {
        return new AnalysisViewModel(_search);
    }
}

public SlagViewModel SlagViewModel
{
    get
    {
        return new SlagViewModel(_search);
    }
}

}

并且您显示部分的视图看起来像

@Html.Partial("PartialAnalysis", Model.AnalysisViewModel)
@Html.Partial("PartialSlag", Model.SlagViewModel)
于 2013-03-14T16:58:48.260 回答