#asp.net #html-table
#asp.net #html-таблица
Вопрос:
В настоящее время я делаю следующее:
@{
ViewBag.Title = "Prospect";
}
<h2>@ViewBag.Prospect.Name</h2>
<table>
<tr>
<td>
<b>Address1:</b>
</td>
<td>@ViewBag.Prospect.Address1
</td>
</tr>
<tr>
<td>
<b>Postcode:</b>
</td>
<td>@ViewBag.Prospect.Postcode
</td>
</tr>
<tr>
<td>
<b>Tel:</b>
</td>
<td>@ViewBag.Prospect.Tel
</td>
</tr>
<tr>
<td>
<b>Email:</b>
</td>
<td>@ViewBag.Prospect.Email
</td>
</tr>
</table>
Как вы можете видеть, кода МНОГО, он беспорядочный, и что ж, в настоящее время я показываю 4 столбца, когда мне нужно 15!!!
Наверняка должен быть более аккуратный синтаксический способ сделать это? Альтернативы использованию таблицы? Примечание: все столбцы должны быть в строку. и также обратите внимание, что требуется отобразить только 1 запись. Не список записей.
Я знаю, что в ROR это было намного аккуратнее, чем это. Я думаю, что я использовал formtastic или что-то подобное для отображения информации. (Я не хочу редактировать информацию, просто просматриваю ее.)
Ответ №1:
Чтобы свести это к минимуму, вы можете использовать отражение для достижения максимально чистого уровня.
Пусть это будет вашим ViewModel
:
public class Prospect
{
public string Name { get; set }
public string Address { get; set; }
public string PostCode { get; set; }
public string Tel { get; set; }
public string Email { get; set; }
}
Это ваш Action
:
public ActionResult ViewProspect()
{
Prospect prospect = new Prospect {
Name = "Jackson",
Address = "21, Some hills",
PostCode = "90210",
Tel = "505123412",
Email = "jack@son.com"
};
Func<string, string> getStringValue = (value) => value == null ? string.Empty : value.ToString();
IEnumerable<KeyValuePair<string, string>> prospectKeyValue = typeof(Prospect).GetProperties().Select(
p => new KeyValuePair<string, string>(p.Name, getStringValue(p.GetValue(prospect, null))));
ViewBag.Prospect = prospectKeyValue;
View();
}
И вот ваш упрощенный View
:
@{
ViewBag.Title = "Prospect";
}
<h2>@ViewBag.Prospect.Single(p => p.Key == "Name").Value</h2>
<table>
@foreach(var keyValue in ViewBag.Prospect)
{
<tr>
<td>
<b>@keyValue.Key</b>
</td>
<td>@keyValue.Value
</td>
</tr>
}
</table>
Комментарии:
1. Очень подробный ответ. Огромное спасибо. Пробуем это сейчас.
2. Возникает проблема в случае целочисленных полей. Похоже, они не показывают
3. Просто измените с
p.GetValue(prospect, null) as string
наp.GetValue(prospect, null).ToString()
.4. а как насчет случая, когда ожидаемое значение равно null? Спасибо
5. Я пошел с
(p.Name, (p.GetValue(prospect, null) ?? "").ToString())
, чтобы сохранить дополнительную функцию. Но спасибо! 🙂