2011-05-12 114 views
1

我想獲得幫助和指導我如何操作從MS-SQL數據庫調用的文本/字符串。因此,這裏是觀賞指數我SettingController.cs部分代碼:在MVC3 +剃鬚刀視圖上分割字符串

public ActionResult Index() 
    { 
     var datacontext = new SGM_SIDDataContext(); 
     var dataToView = from m in datacontext.SGMs 
         orderby m.Seq 
         select m; 
     return View(dataToView.ToList()); 
    } 

,這是我index.cshtml代碼:

@model IEnumerable<MVC_Apps.Models.SGM> 

@{ 
    ViewBag.Title = "Index"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table> 
    <tr> 
     <th> 
      SID 
     </th> 
     <th> 
      Abbrev 
     </th> 
     <th> 
      Val 
     </th> 
     <th> 
      Seq 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.SID) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Abbrev) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Val) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Seq) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.GID }) 
     </td> 
    </tr> 
} 

</table> 

所以大概我有一個視圖。現在,這裏是我想做些什麼: 1)Index.cshtml視圖中的數據 'item.Val' 將是這樣的:

A,L,C,H

和有點像那樣。但可能是行,其中的數據只包含:

H或C或無(Null值)

但是,如果數據包含多個字符喜歡說這確實設置了K和L在item.Val的數據看起來是這樣的:

A,L

該數據是由逗號分隔。所以現在我想分割這個item.Val數據,並做它如果聲明。如果我想檢查item.Val中的每個數據,如果它包含K或L或C或H,或者全部或全部不包含(對不起,如果我的英語不好)。我想查看它,因爲如果所有數據在表格視圖中都包含H,那麼將是名爲Hotel的列,而如果數據也有L,那麼另一列Lounge將顯示並且檢查按鈕被選中。

在item.Val可能的字符是:

A = Admin 
L = Lounge 
H = Hotel 
C = Customer 

任何幫助和想法大加讚賞。先進的謝謝你。

更新信息:

由於即時通訊開始得到的是什麼呢。我真正想要做的是,當item.Val確實包含H(這是酒店),那麼視圖將具有標題名稱爲Hotel的表格列,並且在該記錄中將具有勾選複選框。

這是表視圖的樣品圖像:http://imagebin.org/152941

但隨後的酒店,管理員和用戶信息或者它被滾動或不就是在item.Val 例如爲史密斯item.Val數據看起來像此:C, 例如,對於安娜,所述item.Val數據看起來像這樣:H,C,

PS: - 所述var conf線是測試代碼。忽略它,因爲我已經從源中刪除它。:)

回答

2

創建類似

public class MyViewModel 
{ 
    // items from your model 
    public int Id{get;get;} 
    public String Vals{get;set;} // A,L,C,H 
    ... 
    ... 

    public bool IsHotel 
    { 
    get 
    { 
     return Vals.Split(',').Contains("H"); 
    } 
    } 

    public bool IsAdmin  
    { 
    get 
    { 
     return Vals.Split(',').Contains("A"); 
    } 
    } 

    public bool IsCust 
    { 
    get 
    { 
     return Vals.Split(',').Contains("C"); 
    } 
    } 

} 

在控制器動作視圖模型

public ActionResult Index() 
{ 
    var datacontext = new SGM_SIDDataContext(); 
    var dataToView = from m in datacontext.SGMs 
        orderby m.Seq 
        select new MyViewModel() 
        { 
         // items from your datacontext 
         Id= m.SID, 
         //etc... 

        }; 
    var conf = from m in datacontext.SGMs // what's the purpose of this query?? 
        select m.Val; 

    return View(dataToView.ToList()); 
} 

視圖將需要更新,那麼包括列酒店,卡斯特,管理員和其他任何你需要。我建議你保持簡單,不要試圖在運行中創建HTML列。如果您想這樣做,您可能需要首先檢查列表中每個對象的所有Vals,以確定需要哪些列。在視圖

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.SID) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Abbrev) 
     </td> 
     <td> 
      @(item.IsHotel? "Checked" : "") 
     </td> 
     <td> 
      @(item.IsAdmin? "Checked" : "") 
     </td> 
     <td> 
      @(item.IsCust? "Checked" : "") 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Seq) 
     </td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.GID }) 
     </td> 
    </tr> 
} 
+0

非常感謝您的答案。但我只是更新了我的問題,並提供了一些更多的信息,包括鏈接樣本表視圖(因爲我不能附加圖像) – GunBladeIV 2011-05-12 08:41:53

+0

@gunbladeiv - 答案更新... – Ahmad 2011-05-12 09:52:49

+0

但是,然後艾哈邁德,網絡應用程序規範需要我建立一個動態表取決於item.Val列中的值。如果在任何記錄中沒有酒店標準,則酒店列將不會顯示。如果表格不是動態的,那麼它很簡單,並且您的解決方案可以工作。但是,當處理動態專欄時,我打到了死衚衕。嘆息* – GunBladeIV 2011-05-13 00:06:15