gpt4 book ai didi

asp.net-mvc - 字段子集的验证摘要

转载 作者:行者123 更新时间:2023-12-04 15:24:08 25 4
gpt4 key购买 nike

我有一个包含 3 个不同部分的表单,看起来像这样:

<form action="/Submit/" method="POST">
<h2>
Your Info:
</h2>
<ul>
<li>
<label>
First Name:
@Html.TextBoxFor(m => m.FirstName)
</label>
</li>
<li>
<label>
Last Name:
@Html.TextBoxFor(m => m.LastName)
</label>
</li>
</ul>
<h2>
Membership:
</h2>
<ul>
<li>
<label>@Html.RadioButtonFor(m => m.MembershipLength_Months, 3) 3 Months</label>
</li>
<li>
<label>@Html.RadioButtonFor(m => m.MembershipLength_Months, 12) 12 Months</label>
</li>
</ul>
<h2>
Billing Info:
</h2>
@Html.EditorFor(m=> m.PaymentInfo)
<input type="submit" value="Submit" />
</form>

我想做的是每个部分都有一个摘要。我知道我可以在每个 H2 下做这样的事情:
@if (ViewData.ModelState.Keys.Contains("FirstName") || ViewData.ModelState.Keys.Contains("LastName"))
{
<div>
summary text
@Html.ValidationMessageFor(m => m.FirstName)
@Html.ValidationMessageFor(m => m.LastName)
</div>
}

但感觉应该有一个更清洁的解决方案。谷歌完全让我失望,我无法找到一个自定义的帮助程序或验证摘要扩展,它需要一个集合来表示要汇总的属性。

每个部分都包含大量字段,因此 ModelState.Keys 比较很快就会变得非常难看。有没有干净的方法来做到这一点?

最佳答案

But it feels like there should be a cleaner solution.



是的,您可以编写一个自定义的、可重用的 HTML 帮助程序来完成此任务:
public static class HtmlExtensions
{
public static IHtmlString Summary<TModel>(
this HtmlHelper<TModel> html,
params Expression<Func<TModel, object>>[] expressions
)
{
var div = new TagBuilder("div");
var sb = new StringBuilder();
foreach (var expression in expressions)
{
var unary = expression.Body as UnaryExpression;
if (unary != null && unary.NodeType == ExpressionType.Convert)
{
var lambda = Expression.Lambda(unary.Operand, expression.Parameters);
sb.AppendLine(html.ValidationMessage(ExpressionHelper.GetExpressionText(lambda)).ToHtmlString());
}
else
{
sb.AppendLine(html.ValidationMessageFor(expression).ToHtmlString());
}
}
div.InnerHtml = sb.ToString();
return new HtmlString(div.ToString());
}
}

可以这样使用:
<h2>
Your Info:
@Html.Summary(
x => x.FirstName,
x => x.LastName
)
</h2>

帮助程序允许您列出要作为验证错误包含在摘要中的任何属性。

关于asp.net-mvc - 字段子集的验证摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15706084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com