在视图中显示局部视图并传递参数

时间:2013-03-14 16:36:17

标签: c# asp.net-mvc

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

我的观点如下:

@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 个答案:

答案 0 :(得分: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.SearchValue替换为ViewBag.SearchValue,但您的模型将是存储它的更好位置。

答案 1 :(得分: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();
}

答案 2 :(得分:0)

部分视图不需要控制器操作。控制器动作的存在实际上会使其进入视图。

在您的@ Html.Partial调用中,您希望为要使用的视图传递视图模型。您可以在此处放置网格数据,按任意关键字搜索,排序,准备并准备呈现。

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

要完全包装,您的控制器看起来像:

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)

答案 3 :(得分:0)

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

@if(ViewBag.SearchKey != null)
{
 <div>
 @Html.Action("PartialChemAnalysis", "Home", (string)ViewBag.SearchKey)
 </div>
 <div>
 @Html.Action("PartialSlagView", "Home", (string)ViewBag.SearchKey)
</div>
 }