Разделить строку на MVC3 + вид бритвы - PullRequest
1 голос
/ 12 мая 2011

Я хотел бы получить помощь и руководство о том, как я могу манипулировать текстом / строкой, вызываемой из базы данных 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>

Итак, примерно, я получил View.Теперь вот что я хотел бы сделать: 1) Данные item.Val в представлении Index.cshtml будут выглядеть так:

A, L, C, H

и вроде того.Но это может быть строка, в которой данные содержат только:

H или C или нет (значение NULL)

Но если данные содержат более одного символа, как, скажем,устанавливает для K и L, данные в item.Val будут выглядеть так:

A, L

Какие данные разделяются запятой.Так что теперь я хочу разделить эти данные item.Val и сделать заявление if на нем.Где я хотел бы проверить все данные в item.Val, если они содержат K или L или C или H или все из них или ни одного из них (извините, если мой английский плох).И я хотел бы просмотреть его, если все данные содержат H, поэтому в табличном представлении будет столбец с именем Hotel, а если данные также имеют L, будет отображаться другой столбец Lounge с проверяемой кнопкой проверки.

возможный символ в item.Val:

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

Любая помощь и идеи высоко ценится.Спасибо заранее.

Обновление информации:

Спасибо, я начинаю понимать, что это такое.Что я действительно хочу сделать, так это, когда item.Val содержит H (что для отеля), тогда в представлении будет столбец таблицы с заголовком Hotel и в записи будет галочка.

Thisэто пример изображения табличного представления: http://imagebin.org/152941

Но тогда информация об Отеле, Администраторе и Пользователе либо помечена, либо отсутствует в item.Val Например, для Smith, item.Val данные выглядят так:C, Например, для Анны item.Val данные выглядят так: H,C,

PS: - строка var conf является тестовым кодом.Проигнорируйте это, поскольку я уже удаляю это из своего источника.:)

1 Ответ

2 голосов
/ 12 мая 2011

Создайте 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>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...