EditorFor()可以采用一个object additionalViewData参数,填充的典型方法是:
EditorFor(model => model.PropertyName, new { myKey = "myValue" })
如何在自定义HTML帮助程序中检查additionalViewData的内容,添加或附加到键的现有值等?
我尝试过这些方法:
Dictionary<string, object>()和添加/追加值:不起作用,因为它看起来像MVC中的EditorFor的实现使用新的RouteValueDictionary(additionalViewData)将字典嵌入到字典中new RouteValueDictionary(additionalViewData)但具有与上述相同(或非常相似)的问题我也愿意"你做错了" - 也许我错过了一个更简单的方法.请记住,我要做的是编写一个可重用的HTML帮助程序,并为自定义视图使用的additionalViewData添加一些值.有些值依赖于属性中的元数据,所以它只是使用一堆不同的模板并不是那么容易.
更新我正在做的事情的例子:
public static MvcHtmlString myNullableBooleanFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> choice, string templateName, object additionalViewData)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(choice, htmlHelper.ViewData);
/*
here need to add to additionalViewData some key values among them:
{ propertyName, metadata.PropertyName }
*/
StringBuilder sb = new StringBuilder();
sb.AppendLine(htmlHelper.EditorFor(choice, templateName, additionalViewData).ToString());
MvcHtmlString validation = htmlHelper.ValidationMessageFor(choice);
if (validation != null) …Run Code Online (Sandbox Code Playgroud) 使用@Html.EditorFor(model =>model.IsClient),其中IsClient是布尔值,使用Not Set, Yes and No选项呈现下拉列表.
一切都很好.
现在我想将knockoutjs与我喜欢的结果下拉列表一起使用,那么如何使用@ Html.EditorFor添加data-bind属性,我需要使用knockoutjs来处理这个下拉列表?
我试过了:
@Html.EditorFor(model => model.IsClient, new Dictionary<string, object> { { "data-bind", "value: Account.IsClient" } })
Run Code Online (Sandbox Code Playgroud)
但是,它使用对象additionalViewData参数,并且它不呈现data-bind属性.这可能很自然,因为此参数可能与渲染标记的Html属性无关.
但是,找不到任何合理的文档,并且没有其他重载看起来可能是我想要的候选者.
TIA有什么建议.
我正在使用mvc编辑器功能,但似乎@something不起作用.我不知道为什么.
@Html.EditorFor(model => model.Password, new { @Value = "xxx" })
Run Code Online (Sandbox Code Playgroud)
这取模型值而不是"xxx".
非常感谢你的帮助 !