#linq-to-sql #asp.net-mvc-3 #razor
#linq-to-sql #asp.net-mvc-3 #razor
Вопрос:
Я хотел бы получить справку и руководство о том, как я могу манипулировать текстом / строкой, которые вызываются из базы данных MS-SQL. Итак, вот мой частичный код SettingController.cs для просмотра индекса:
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) Элемент data ‘.Значение ‘ в представлении Index.cshtml будет таким:
A, L, C, H
и что-то в этом роде. Но может быть строка, в которой данные содержат только:
H или C или none (нулевое значение)
Но если данные содержат более одного символа, например, скажем, что он установлен для K и L, данных в item.Значение Val будет выглядеть следующим образом:
A, L
В котором данные разделяются запятой. Итак, теперь я хочу разделить этот элемент.Проверяйте данные и выполняйте для них инструкцию if. Где я хотел бы проверить все данные в item.Значение, если оно содержит K, или L, или C, или H, или все они, или ни один из них (извините, если мой английский плохой). И я хотел бы просмотреть это так: если все данные содержат H so в табличном представлении, то будет столбец с именем Hotel, а если в данных также есть L so, будет отображаться другой столбец Lounge с отмеченной кнопкой проверки.
возможный символ в элементе.Значение равно:
A = Admin
L = Lounge
H = Hotel
C = Customer
Любая помощь и идеи высоко ценятся. Заранее благодарю.
Обновить информацию:
Спасибо, я начинаю понимать, что это такое. Что я действительно хочу сделать, так это, когда элемент.Значение Val действительно содержит H (которое обозначает отель), тогда в представлении будет столбец таблицы с названием заголовка Hotel, а в записи будет установлен флажок.
Это примерное изображение табличного представления: http://imagebin.org/152941
Но тогда информация об отеле, администраторе и пользователе, отмечена она галочкой или нет, находится в item.Val, например, для Smith, элемент.Данные Val выглядят следующим образом: C,
Например, для элемента Anna.Данные Val выглядят следующим образом : H,C,
P.S: — var conf
строка является тестовым кодом. Игнорируйте это, поскольку я уже удалил его из своего источника. 🙂
Ответ №1:
Создайте ViewModel, подобный
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());
}
Представление необходимо будет обновить, поэтому включите столбцы для Hotel, Cust, Admin и любые другие, которые вам нужны. Я бы посоветовал вам упростить это и не пытаться создавать столбцы 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>
}
Комментарии:
1. Большое спасибо за ваш ответ. Но я только что обновил свой вопрос и предоставил дополнительную информацию, включая пример представления таблицы по ссылке (поскольку я пока не могу прикрепить изображение)
2. Но тогда, Ахмад, спецификации веб-приложений, требующие от меня создания динамической таблицы, зависят от значения в item. Столбец Val.. Если ни в одной из записей нет критериев отеля, то столбец Hotel отображаться не будет. Если таблица не является динамической, значит, это просто и ваше решение работает. Но затем, имея дело с динамическим столбцом, я зашел в тупик. вздох*
3. @gunbladeiv — прочитайте мой ответ еще раз. Я упоминаю способ, которым вы можете это сделать. Сначала вам нужно оценить весь
item.Vals
ваш список, чтобы определить, какие столбцы вам нужны. Возможно, вы захотите взглянуть наWebGrid
HtmlHelper и использовать его сdynamic
моделью.4. Извините. Раньше я читал слишком быстро. Я попробую и напишу полные коды этого (успешно или безуспешно) Спасибо, Ахмад. Вы очень помогли открыть мое алгоритмическое решение. И извините за мой плохой английский.