gpt4 book ai didi

asp.net-mvc - MVC3 TextBoxFor 与 EditorFor - 每个问题

转载 作者:行者123 更新时间:2023-12-02 17:51:44 24 4
gpt4 key购买 nike

我在网上浏览了一段时间,但找不到解决我的具体问题的好方法。我正在开发 MVC3 Razor 应用程序。我也在客户端使用 jQuery 做了很多事情,所以在这种情况下我需要我的输入字段具有 html Id 属性。

在此特定问题中,当我使用 TextBoxFor 显示货币(类型为小数)时,该值以 4 位小数呈现(我只需要 2 位)。我放入模型属性

[DisplayFormat(DataFormatString = "{0:n2}", ApplyFormatInEditMode = true)]

当它渲染时,它似乎忽略了这个“displayFormat”。我在网上看到其他帖子确认 TextBoxFor html 帮助程序存在此问题。

另一方面,我可以更改为使用 EditorFor html 帮助程序,并且 DisplayFormat 模型属性适用于将我的文本框值格式化为小数点后两位。缺点是我失去了将 html 属性应用到 jQuery 所需的 html 帮助器的能力。两全其美的最佳方法是什么?我已经看到了很多解决方法,但似乎必须有一种更简单的方法来做到这一点。

顺便说一句,我的特定项目要求我的大部分字段都具有 html Id 属性,有时还需要类,以便我可以执行客户端 jQuery 操作。不确定这是否意味着我应该专注于扩展 EditorFor html 帮助器以也接受 html 属性。

最佳答案

DisplayFormat 仅由 MVC 在 razor 的任何 Display 扩展方法中使用。 (例如 DisplayFor)不幸的是,要做你想做的事,你必须编写一些“手动”代码......这里有一个例子可以帮助你。它基本上重现了 TextBoxFor 代码,但做出了一些很可能不利于生产的假设。请注意下面的 displayText 分配,这就是我们真正关心您在 DisplayFormat 中设置的 DisplayFormatString 的地方。

在 View 中调用它@Html.TextEditorFor(m => m.Value)

public static class CustomEditorFor
{
public static IHtmlString TextEditorFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
{
return TextEditorFor(helper, expression, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
}

public static IHtmlString TextEditorFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
object value = metadata.Model;
string displayText = string.Format(metadata.DisplayFormatString, value);

string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));

TagBuilder tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttributes(htmlAttributes);
tagBuilder.MergeAttribute("type", "text");
tagBuilder.MergeAttribute("name", fullName, true);

tagBuilder.MergeAttribute("value", displayText);
tagBuilder.GenerateId(fullName);
ModelState modelState;
if (helper.ViewData.ModelState.TryGetValue(fullName, out modelState))
{
if (modelState.Errors.Count > 0)
{
tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);
}
}

tagBuilder.MergeAttributes(helper.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), metadata));

return new HtmlString(tagBuilder.ToString(TagRenderMode.SelfClosing));

}
}

关于asp.net-mvc - MVC3 TextBoxFor 与 EditorFor - 每个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10806240/

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