在MVC3 +剃须刀视图上分割字符串

问题描述:

我想获得帮助和指导我如何操作从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线是测试代码。忽略它,因为我已经从源中删除它。:)

创建类似

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