Как вывести таблицу HTML вместо поля выбора (сгенерированного с помощью ListBoxFor) в ASP.NET? - PullRequest
0 голосов
/ 19 февраля 2012

Я, как правило, новичок в ASP.NET и изменяю некоторый код, который я унаследовал.Существует фрагмент кода, который создает поле выбора с использованием ListBoxFor на основе поискового запроса, введенного пользователем:

@Html.ListBoxFor(m => m.SelectedItem, 
                 Lookup.Models.myService.Search(Model.SearchTerm, 
                                         null == Model.SelectedCity ? 1 :  
                                         Int32.Parse(Model.SelectedCity))

Подпись для Search():

public static List<SelectListItem> Search(string term, string city)

Вместо отображения окна выбора я хочу вывести таблицу HTML вместо данных.Я даже не уверен, как поступить так или вообще, какую информацию вам дать, чтобы помочь мне:)

1 Ответ

3 голосов
/ 19 февраля 2012

Помощник ListBoxFor отображает элементы <select> с атрибутом multiple="multiple", позволяющие выбирать несколько элементов.Если вы хотите что-то еще, вы не должны использовать этот помощник.Итак, вы сказали, что вам нужна таблица HTML.

Теперь в коде, который вы показали, что-то не так.Вы звоните Lookup.Models.myService.Search внутри представления.Представления не должны извлекать данные из некоторых мест.Предполагается, что они отображают только те данные, которые передаются им в виде моделей представлений действием контроллера.Так что этот призыв не должен быть сделан в представлении.Это должно быть сделано заранее, и результат должен быть сохранен как свойство в вашей модели представления:

public IEnumerable<SelectListItem> Items { get; set; }

В любом случае.Первая возможность - написать разметку самостоятельно:

<table>
    <thead>
        <tr>
            <th>Value</th>
            <th>Text</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Items)
        {
            <tr>
                <td>@item.Value</td>
                <td>@item.Text</td>
            </tr>
        }
    </tbody>
</table>

Конечно, переписывать этот код снова и снова может быть громоздко.Таким образом, вы можете использовать его в DisplayTemplate.Например, вы можете поместить его в ~/Views/Shared/DisplayTemplates/MyTableTemplate.cshtml, а затем, когда вам понадобится отобразить его в виде, вы можете использовать:

@Html.DisplayFor(x => x.Items, "MyTableTemplate")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...