Разделить строку на MVC3 razor view

#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. Извините. Раньше я читал слишком быстро. Я попробую и напишу полные коды этого (успешно или безуспешно) Спасибо, Ахмад. Вы очень помогли открыть мое алгоритмическое решение. И извините за мой плохой английский.