0

インデックスビューに2つの部分ビューを表示しようとしています。これらの部分ビューには、設定した検索ボックスで何かが検索されたときにデータを表示したいデータグリッドがあります。これらのページは両方とも別々に行うと機能しますが、部分的なビューとしてどのように使用するのかわかりません。

私の見解は次のようになります。

@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をモデルのビューに戻したことを前提としています。Model.SearchValue代わりにViewBag.SearchValueで返すことができViewBag.SearchValueますが、モデルを保存するのに適した場所です。

于 2013-03-14T16:46:32.563 に答える
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プロパティのいずれかです(Iところで最初のアプローチを好む;それはコード的には重いが、カプセル化をよりよく保存する)。

すべてをまとめると、コントローラーは次のようになります。

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 に答える
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 に答える