2014-01-29 41 views
0

我有(2)除了頁面上的一些文本描述以外,99%相同的MVC視圖。從查詢字符串調用View中提供的bool值在IList<TModel>上切換Where子句,該子句最終從控制器上的Index方法加載到頁面上。修改基於查詢字符串的MVC視圖文本

我知道這是不好的做法,從View讀取查詢字符串,並且任意選​​擇單個TModel實例來讀取bool值似乎也是不正確的,所以我想知道如何做到這一點。

說我有以下文字:

視圖1: <h5>Please update the Positive values</h5>
視圖2: <h5>Please update the Negative values</h5>

我真正想要的是1個圖,其中PositiveNegative文本值只需撥動基於從以下查詢字符串:

?IsPositive=true

這個值曾經被稱爲Index方法在模型上也是可用的,但由於模型是IList,我必須看一個實例。

順便說一下,描述符需要在View的約3-4個位置上進行更改,所以如果集中而不是內聯更好,那我就很好。

基於查詢字符串值切換此文本的正確方法是什麼?最終會在IList<TModel>的每個實例上結束?

+0

爲什麼不直接找出控制器中的文本,並將它放到ViewBag中並傳遞給視圖? – Tony

+0

@ { var isPostive = Convert.ToBoolean(HttpContext.Current.Request.QueryString [「IsPositive」]); } – Tony

+2

嘗試在視圖模型中使用該標誌作爲屬性。由於測試缺陷,ViewBag是一個壞習慣。 – VasileF

回答

1

去這個使用視圖模型包含您的IList<TModel>IsPositive標誌,像這樣的最好方法:

public class MyViewModel 
{ 
    public IList<TModel> MyList { get; set; } 

    public bool IsPositive { get; set; } 
} 

你的操作方法建立模型,並把它傳遞給視圖:

public ActionResult Index(bool IsPositive) 
{ 
    IList<TModel> myList = BuildYourList(); 

    MyViewModel model = new MyViewModel() 
    { 
     MyList = myList, 
     IsPositive = IsPositive 
    }; 

    return View(model); 
} 

然後在你看來,你會簡單地檢查IsPositive財產,並顯示相應的HTML:

@model Your.ViewModel.Namespace.MyViewModel 

@if (Model.IsPositive) 
{ 
    <h5>Please update the Positive values</h5> 
} 
else 
{ 
    <h5>Please update the Negative values</h5> 
} 
+0

是的完美謝謝你 - 我不能相信我有這個大腦放屁。我在幾乎所有的控制器中都使用ViewModel來返回,但結合這個特定視圖的方式讓我的大腦糾結了一下。感謝您解開並指出明顯。 – atconway