gpt4 book ai didi

asp.net-mvc - EditorTemplates/Object.cshtml 使用 EditorFor() 而不是 Editor()?

转载 作者:行者123 更新时间:2023-12-04 12:13:38 26 4
gpt4 key购买 nike

我正在尝试创建一个复制 Html.EditorForModel() 的通用编辑器模板,以便以后进行自定义和构建。 Brad Wilson's template非常接近,但我发现当 ViewData(或 ViewBag)和模型中存在相同的键时,它会窒息。例如 ViewBag.Title如果 View 模型也有 Title 会导致问题属性(property)。

学到了here使用强类型助手(即 Html.EditorFor(x => x.Title) 而不是 Html.Editor("Title") 似乎有帮助。所以我尝试修改 Brad 的模板,但我遇到了砖墙,因为到目前为止我尝试的任何方法都没有奏效。我想不通了解如何在我不知道模型类型的上下文中使用强类型助手,例如编辑器模板。

有没有办法像 Brad 一样创建对象模板,但使用强类型助手(即 LabelFor、EditorFor、ValidatorMessageFor)而不是弱类型助手(即 Label、Editor、ValidatorMessage)?

谢谢。

最佳答案

我以一种稍微迂回的方式解决了这个问题,在调用 @Html.Editor 之前删除了 ViewData,然后将其放回原处。

Object.cshtml:

        object oldViewData = null;
var hasConflictingViewData = ViewData.TryGetValue(prop.PropertyName, out oldViewData);

if (hasConflictingViewData)
{
ViewData.Remove(prop.PropertyName);
}

@Html.Editor(prop.PropertyName)

if (hasConflictingViewData)
{
ViewData.Add(prop.PropertyName, oldViewData);
}

我能想到的唯一其他选择是使用大量反射来一般地使用运行时类型调用 EditorFor,并传入相关属性的表达式。

关于asp.net-mvc - EditorTemplates/Object.cshtml 使用 EditorFor() 而不是 Editor()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5666495/

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