2013-03-14 73 views
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); 
    } 

理想什麼在搜索框中將被傳遞給雙方的意見和電網將形成以對。我不知道我做錯了什麼,所以任何幫助表示讚賞。

回答

0

我需要在我看來將局部視圖呼叫更改爲:

@if(ViewBag.SearchKey != null) 
{ 
<div> 
@Html.Action("PartialChemAnalysis", "Home", (string)ViewBag.SearchKey) 
</div> 
<div> 
@Html.Action("PartialSlagView", "Home", (string)ViewBag.SearchKey) 
</div> 
} 
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中返回它,相反,我想用ViewBag.SearchValue代替Model.SearchValue,但是你的模型將是一個更好的存儲它的地方。

+0

感謝您的幫助。頁面加載時不會搜索任何內容。用戶需要輸入搜索並在發生這種情況之前點擊按鈕。我的想法是在執行搜索後讓數據網格在同一頁上呈現。 – 2013-03-14 16:59:16

+0

然後你需要改變它。加載頁面時會發生@ Html.Partial()。你要求的是用AJAX調用這些方法,然後動態地渲染結果。你當然可以做到這一點,它不應該太難。我沒有時間提供該解決方案,因此我會在幾分鐘內刪除此答案。好運:) – 2013-03-14 17:03:31

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(); 
} 
+0

是否把[HttpPost]上面的索引改變了什麼?當我做了你建議的更改並試圖運行它時,我得到一個404錯誤。 – 2013-03-14 17:08:40

+0

這意味着您沒有帶主頁操作的PostController。 – 2013-03-14 17:13:28

+0

@MikeC。但我有一個索引操作HomeController。不應該那樣工作?我對這很多東西都很陌生,所以如果這聽起來很愚蠢,請原諒我。 – 2013-03-14 17:22:46

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) 
+0

我以前從未使用視圖模型,所以只是爲了澄清:視圖模型如何與具有方法的模型相關聯?或者我看着這個錯誤? – 2013-03-14 17:26:23

+0

視圖模型僅僅是一個由另一個名稱構成的類,所以它將具有所有其他類具有的所有相同的屬性和方法。但是,考慮到虛擬機存在的原因是爲了包含視圖呈現本身所需的所有信息,所以您應該小心,不要將任何內容添加到不直接支持查看它的虛擬機。 – Heather 2013-03-14 17:49:14