在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>
}
非常感谢您的答案。但我只是更新了我的问题,并提供了一些更多的信息,包括链接样本表视图(因为我不能附加图像) – GunBladeIV 2011-05-12 08:41:53
@gunbladeiv - 答案更新... – Ahmad 2011-05-12 09:52:49
但是,然后艾哈迈德,网络应用程序规范需要我建立一个动态表取决于item.Val列中的值。如果在任何记录中没有酒店标准,则酒店列将不会显示。如果表格不是动态的,那么它很简单,并且您的解决方案可以工作。但是,当处理动态专栏时,我打到了死胡同。叹息* – GunBladeIV 2011-05-13 00:06:15